Application.mk的作用:
Application.mk描述了应用程序需要哪些动态库和静态库。
存放位置:
文件通常放在项目目录的jni文件夹下。
变量定义:
由于Application.mk说到底只是作为GNU makefile的一个片段,其中也需要定义一些变量。
-APP_PROJECT_PATH
此变量应该被赋予项目的根目录地址,此项为可选项。是用来拷贝或安装已脱离版本的jni共享库到一个apk产生工具已知的具体位置
-APP_MODULES
此项为可选项,当没有此选项时,NDK会自动编译android.mk文件中定义的所有模块及其包含的子模块(通过默认_all_编译android.mk中的所有,并且可以包含任意子makefile文件)。
当有此选项时,必须是一个模块的列表,各个模块之间以空格为分隔符分开或者是向android.mk中罗列开来,就像是android.mk文件中的LOCAL_MODULE定义中的一样。
-APP_OPTIM www.2cto.com
此选项可以被定义为 release 或 debug。这个选项用于变更编译程序模块时的优化级别。
默认的选项是release,此选项下会得到较高级别的优化(将产生高度地优化二进制代码)。debug下为了便于调试不会进行过多优化。
可以在manifest文件中<application>tag内设置android:debuggable为ture来改变默认值为debug
其实无论debug还是release都是允许用户进行调试的,只是debug模式下会提供更多的信息。 一些变量是被优化掉了不能被视察了,代码再排序让单步调试困难,堆栈跟踪不可信赖,等等。
-APP_CFLAGS
-APP_BUILD_SCRIPT默认条件下,NDK编译系统会到工程目录的jni文件夹下查找android.mk文件。如果你想覆盖这个行为的话就可以定义此变量。如果你给定的是一个非绝对路径的话,那么这个路径总是被认为是相对于NDK顶层目录的路径。
-APP_ABI默认条件是armeabi(ndk生成系统将产生适用于armeabi ABI机器码,这符合一个基于ARMv5TE的CPU对应软件浮点操作),用户可以通过此选项进行修改(来选择一个不同的ABI),例如:为了在ARMv7上支持硬件FPU指令可以修改如下:APP_ABI := armeabi-v7a(对于支持硬件 FPU 指令在基于 ARMv7 的设备上)或者支持ARMv5TE 又支持ARMv7的设备APP_ABI := armeabi armeabi-v7a
-APP_STL默认条件下,NDK编译系统会使用android系统提供的轻量级C++运行时库/system/lib/libstdc++.so提供头文件。NDK本身为用户提供了可选择的C++库,用户可以使用或是链接到自己的应用。例如:
APP_STL := stlport_static --> static STLport library
APP_STL := stlport_shared --> shared STLport library
APP_STL := system --> default C++ runtime library
举例:
- #1.指定application里要链接的标准c++库
- APP_STL := gnustl_static
- #2.编译选项
- APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1