Application.mk用法详解

Application.mk文件定义要编译的多个变量的GNU Makefile片段,位于 P R O J E C T / j n i / 目 录 下 , PROJECT/jni/目录下, PROJECT/jni/,PROJECT是项目目录,另一种方式放到 N D K / a p p s / 目 录 的 子 目 录 下 ( NDK/apps/目录的子目录下( NDK/apps/NDK/apps//Application.mk);

Application.mk枚举并描述你的应用需要的模块,这些信息包括:用于针对特定平台进行编译的ABI、工具链、要包含的标准库(静态和动态STLport或默认系统);
Application变量

  1. APP_PLATFORM
    变量设置Android平台的名称;
    eg:APP_PLATFORM := android-9
  2. APP_ABI
    NDK构建系统默认使用armeabi ABI生成机器代码,可以自己进行设置,
    eg:APP_ABI :=armeabi
    可以了解ABI详情
  3. APP_PROJECT_PATH
    此变量用于存储应用项目根目录的绝对路径,如果Application.mk文件放在 N D K / a p p s / < m y a p p > 下 必 须 设 置 此 变 量 , 如 果 放 在 NDK/apps/<myapp>下必须设置此变量,如果放在 NDK/apps/<myapp>PROJECT/jni/目录下此变量可选
  4. APP_OPTIM
    此变量值为release或debug,默认为release发行模式,生成高度优化的二进制文件,设置debug模式生成未优化的二进制文件,容易进行调试;
    注:如果在AndroidMainfest.xml的声明android:debuggable=true将导致此变量使用debug而非release,可以通过设置release替换默认值;
  5. APP_BUILD_SCRIPT
    默认情况下,NDK构建系统在jni/下查找名称为Android.mk的文件;以通过APP_BUILD_SCRIPT定义指向构建脚本;
  6. APP_STL
    默认情况下,NDK构建系统为Android系统提供的最小C++运行时库(system/lib/libstdc++.so), 说明一下,system C++运行库要被废除了,很多情况下C++ STL功能无法使用。所以最好加上 APP_STL := c++_shared 这样的脚本。NDK运行时和功能需要的C++库可以参考:[C++支持库;]
    https://developer.android.google.cn/ndk/guides/cpp-support.html#runtimes
  7. APP_PIE
    从Android4.1(API Level 16)开始,Android的动态链接器支持位置独立的可执行文件(PIE); 从Android 5.0(API Level 21)开始可执行文件需要PIE. 默认情况下,从android-16起ndk-build会自动将此值设置为true,也可也同手动设置true或false;此标志只适用于可执行文件,在构建共享或静态库时没有影响;
当你在编译OpenPose源代码时,在源代码的根目录下应该会有一个名为`Android`的目录,这个目录中就包含了`Android.mk`和`Application.mk`两个文件,用于在Android NDK环境下编译OpenPose库。 这是`Android.mk`文件的一个示例: ``` LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := openpose LOCAL_SRC_FILES := src/main.cpp \ src/openpose.cpp \ src/pose.cpp \ src/net.cpp \ src/utils.cpp LOCAL_C_INCLUDES := $(LOCAL_PATH)/include \ $(LOCAL_PATH)/3rdparty/include LOCAL_LDLIBS := -lm -llog -ljnigraphics -ldl -lz LOCAL_STATIC_LIBRARIES := cpufeatures include $(BUILD_SHARED_LIBRARY) $(call import-module,android/cpufeatures) ``` 在这个文件中,`LOCAL_PATH`是当前目录的路径,`LOCAL_MODULE`是编译后生成的库文件名,`LOCAL_SRC_FILES`是编译需要的源文件列表,`LOCAL_C_INCLUDES`是头文件所在目录,`LOCAL_LDLIBS`是需要链接的库文件列表,`LOCAL_STATIC_LIBRARIES`是需要静态链接的库文件列表。 这是`Application.mk`文件的一个示例: ``` APP_ABI := armeabi-v7a APP_PLATFORM := android-19 APP_STL := gnustl_static APP_BUILD_SCRIPT := Android.mk APP_OPTIM := release ``` 在这个文件中,`APP_ABI`是指定编译生成的so库的架构,`APP_PLATFORM`是指定编译生成的so库的最低支持的安卓API版本,`APP_STL`是指定编译使用的STL库,`APP_BUILD_SCRIPT`是指定编译脚本文件名,`APP_OPTIM`是指定编译优化级别。 需要根据你的具体需求,对这些文件进行相应的调整和修改,以满足你的编译需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值