最近将一个DLL库移植至安卓下,编译出so文件。

经历makefile、cmake等等的入门到放弃.....

最后还是使用android的ndk编译命令来解决

每个NDK文件下,均包含的是所有工具链、头文件、库文件等

执行ndk-build命令,诸如:D:\10.AndroidSDK\ndk\android-ndk-r15b\ndk-build.cmd,则是使用R15版本的NDK编译

ndk-build编译时,会在指定工作目录下查找jni/Android.mk及jni/Application.mk,这两个文件也是标准makefile

Application.mk中定义一个APP下所有的选项,诸如编译几个ABI、编译时使用什么STL

示例:

# 不写 APP_ABI 会生成全部支持的平台,目前支持:armeabi arm64-v8a armeabi-v7a
# APP_ABI := armeabi arm64-v8a armeabi-v7a mips mips64 x86 x86_64
# APP_ABI := all
APP_ABI := arm64-v8a
APP_STL := c++_static

Android.mk则定义一个或多个模块的编译,限定了相应宏来确定模块名、相应源代码文件

示例:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# 要生成的.so库名称。java代码System.loadLibrary("hello");加载的就是它
LOCAL_MODULE := XXXXXX # C++文件
LOCAL_SRC_FILES := ../src/XXX/AAA.cpp \
../src/XXX/BBB.cpp \
../src/XXX/base64/CBase64.cpp \
../src/XXX/BB/FF.cpp LOCAL_C_INCLUDES := $(LOCAL_PATH)/../inc $(LOCAL_PATH)/../src/XXX LOCAL_CFLAGS := -DXXX_EXPORT LOCAL_LDLIBS := -luvc -lusb100 -ljpeg-turbo1500 LOCAL_LDFLAGS := -L$(LOCAL_PATH)/../lib/$(TARGET_ARCH_ABI) -lm -llog # LOCAL_LDFLAGS := -L$(LOCAL_PATH)/../lib/$(TARGET_ARCH_ABI)-luvc -lusb100 -ljpeg-turbo1500 -lm -llog include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE指定的是模块名
LOCAL_SRC_FILES指定相应的源代码文件

其中Android.mk中使用的宏名TARGET_ARCH_ABI,即Application.mk下面APP_ABI的当前项ABI
include $(BUILD_SHARED_LIBRARY)表示编译的是一个共享库

如果想编译多个模块,则应该在include $(BUILD_SHARED_LIBRARY)后面,使用include $(CLEAR_VARS)清除变量,
增加更多模块。
 
 
												

Android下Native的so编译:使用ndk-build.cmd/.sh的更多相关文章

  1. Android下Native的so编译:使用cmakelists.txt

    android studio的CMakeLists.txt写好后,在Studio中编译没问题,在命令编译时则需要配置很多参数才能成功 示例CMakeLists.txt文件: cmake_minimum ...

  2. 在Android下运行Linux平台编译的程序

    编译时需注意使用 -static 编译选项: 否则会提示运行:/system/bin/sh: ./i2c: No such file or directory

  3. NDK下 将Platinum SDK 编译成so库 (android - upnp)

    Platinum UPnP SDK 是一个跨平台的C++库,利用该库,可以很容易就构建出DLNA/UPnP控制点(DLNA/UPnP Control Point)和DLNA/UPnP设备(DLNA/U ...

  4. 【转】Android下编译jni库的二种方法(含示例)

    原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从N ...

  5. 【转】Android下编译jni库的二种方法(含示例) -- 不错

    原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从N ...

  6. Android -- Android下的NDK开发(一)

    1,NDK是什么?为什么要进行NDK开发? NDK:Native Development Kit.Android应用运行在Dalvik虚拟机中.NDK允许开发人员使用本地代码语言(例如C和C++)实现 ...

  7. Android下NDK开发环境搭建

    Android下NDK开发环境搭建 1.     AndroidNDK安装与配置 1.1  NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...

  8. NDK环境搭建(Native Code的编译,不需要Cygwin)

    分类: android2013-06-21 15:49 475人阅读 评论(0) 收藏 举报 Android NDK 目录(?)[-] System and Software Requirements ...

  9. ubuntu下整合eclipse和javah生成jni头文件开发android的native程序

    0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo,经过我几番折磨,写了n多的helloword工程,总是不成功,工程名字也就由helloow ...

随机推荐

  1. [工具]Hydra-爆破

    语法 hydra [[[-l LOGIN | -L FILE]                      [-p PASS | -P FILE]] |                      [-C ...

  2. dedecms织梦无法保存栏目内容的解决方法

    最近使用DedeCms5.3和DedeCms5.5遇到了一个不可思议的问题:在添加栏目时IE内核的浏览器无法保存栏目内容.到网上搜索了半天没找到解决方法,查看DedeCms官方搜索到的结果是“栏目内容 ...

  3. 递归算法几个实例---C/C++

    //1.斐波那契数列 int fibo(int n) { || n==) { ; } else { ) + fibo(n-); } } //2.阶乘 int fac(int n) { || n==) ...

  4. centos7 远程桌面连接到xfce桌面

    1 安装xfce $ sudo yum install -y epel-release $ sudo yum groupinstall -y "Xfce" $ sudo reboo ...

  5. 【POJ2486】Apple Tree

    题目大意:给定一棵 N 个节点的有根树,点有点权,边权均为1.现允许从根节点出发走 K 步,求可以经过的点权之和最大是多少. 题解:可以将点权看作是价值,将可以走的步数看作是重量,则转化成了一个树上背 ...

  6. 前端每日实战:157# 视频演示如何用纯 CSS 创作一个棋盘错觉动画(实际上每一行都是平行的)

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/VEyoGj 可交互视频 此视频是可 ...

  7. ZROI 19.08.01 生成函数方法

    写在前面:由于我数学基础不好,加上缺乏生成函数知识,所以这一下午我都处在掉线和非掉线的叠加态.而且我写\(\LaTeX\)很慢,所以笔记相当混乱而且不全面.说白了就是我太菜了听不懂. 1.一般生成函数 ...

  8. thinkphp5杂谈--模板

    一种新型开源模板   http://www.h-ui.net/H-ui.admin.shtml 下载页面代码 除了curl以外还可以借助  仿站小工具V7.0,操作示意图

  9. 关于AES加密CryptoJS

    import * as CryptoJS from 'crypto-js'; let AuthTokenKey = "XXX"; //AES密钥let AuthTokenIv = ...

  10. 对ECMAScript的研究-----------引用

    ECMAScript 新特性与标准提案 一:ES 模块 第一个要介绍的 ES 模块,由于历史上 JavaScript 没有提供模块系统,在远古时期我们常用多个 script 标签将代码进行人工隔离.但 ...