【Android本地开发技术:编译脚本】Application.mk

来源:互联网 发布:海拔计指南针软件 编辑:程序博客网 时间:2024/05/29 04:47

作者:郭孝星
微博:郭孝星的新浪微博
邮箱:allenwells@163.com
博客:http://blog.csdn.net/allenwells
Github:https://github.com/AllenWells

一 Application.mk文件的作用和特点

作用:描述应用程序中所需要的模块(静态库或动态库)。

位置:Application.mk通常放在PROJECT/jni/Applicatio.mkPROJECT指的是项目路径。

二 Application.mk文件的变量

2.1 APP_PROJECT_PATH

必选变量,并且会给出应用程序工程的根目录的一个绝对路径。

2.2 APP_MODULES

可选变量,如果没有定义,这个模块名字就被定义在Android.mk文件的LOCAL_MODULE中,NDK将由Android.mk中声明的默认模块编译,并且包含所有的子文件(Makefile文件),NDK会自动计算模块依赖。如果定义了,它必须是一个空格分隔的模块列表。

2.3 APP_OPTM

可选变量,用来定义release或debug,在编译应用程序模块的时候,可以用来改变优先级。release模式是默认的,并且会生成高度优化的二进制代码。debug模式生成的是未优化的二进制代码,也可以检测很多的bug,也可以用调试。

注意:可以调试release和debug版二进制,但release版构建倾向于调试回话中提供较少信息,一些变量被优化且不能被检测,代码重新排序可能导致代码步进变得困难,堆栈跟踪可能不可靠。

2.4 APP_CFLAGS

一个C编译器开关集合,在编译任意模块的任意C或C++源代码时传递。它可以用于改变一个给定的应用程序需要依赖的模块的构建,而不是修改它自身的Android.mk文件。

2.5 APP_BUILD_SCRIPT

默认,NDK构建系统将在 (APPPROJECTPATH)/jniAndroid.mk(APP_PROJECT_PATH)/jni/Android.mk
如果你想重载这个行为,你可以定义APP_BUILD_SCRIPT指向一个不同的构建脚本。一个非绝对路径将总是被解析为相对于NDK顶级目录的路径。

2.6 APP_ABI

默认情况下,NDK的编译系统根据 “armeabi” ABI生成机器代码。可以使用APP_ABI 来选择一个不同的ABI。

举例

在ARMv7的设备上支持硬件FPU指令。可以使用APP_ABI := armeabi-v7支持IA-32指令集,可以使用APP_ABI := x86同时支持这三种,可以使用APP_ABI := armeabi armeabi-v7a x86。

2.7 APP_STL

默认情况下,NDK构建系统提供由Android系统给出的最小C++运行时库(/system/lib/libstdc++.so)的C++头文件。 然而,NDK带有另一个C++实现,你可以在你自己的应用程序中使用或链接它。定义APP_STL可以作以下选择:

APP_STL := stlport_static         static STLport libraryAPP_STL := stlport_shared       hared STLport libraryAPP_STL := system                    default C++ runtime library
0 0