最近将一个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)清除变量,
增加更多模块。
 
 
												

最新文章

  1. js实现身份证号码验证
  2. CLR via C#深解笔记三 - 基元类型、引用类型和值类型 | 类型和成员基础 | 常量和字段
  3. Android -- 使用inBitmap要注意的地方
  4. 【LeetCode】7 & 8 - Reverse Integer & String to Integer (atoi)
  5. oracle中的exists 和not exists 用法 in与exists语句的效率问题
  6. 特性扩展:WebActivatorEx
  7. iOS将产品进行多语言发布,开发
  8. java 类处理工具
  9. 为什么struts2 ajax 方法执行两次
  10. DAY TRADER
  11. BZOJ 3277 串 (广义后缀自动机)
  12. linux服务器之间拷贝文件和文件夹
  13. Android开发工具综述,开发人员必备工具
  14. while循环的基本用法
  15. iOS开发-APP测试基本流程
  16. java获取当前应用的运行信息(内存,线程,运行时间,状态等)
  17. 在Windows服务器上启用TLS 1.2及TLS 1.2基本原理
  18. 【Matplotlib】利用Python进行绘图
  19. 解决Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext
  20. Win 7 IE11不能下载文件,右键另存为也不行

热门文章

  1. apache 单个ip配置多个发布目录多个域名
  2. jQuery+Ajax实现图片的预览和上传
  3. 在win32中使用SetWindowSubclass阻止Enter键
  4. 【HDU3308】LCIS
  5. VxLAN、PAE、Telemetry简介
  6. mysql-5.6.45-linux-glibc2.12-x86_64.tar.gz下载安装
  7. PHP基础教程探讨一些php编程性能优化总结
  8. Devexpress 10
  9. HY中考游记
  10. (76)深入浅出Mqtt协议