目录
ndk-build
认识Android.mk和Application.mk
LOCAL_PATH :=$(call my-dir) //此变量表示源文件在开发树中的位置include $(CLEAR_VARS) //CLEAR_VARS 变量指向一个特殊的 GNU Makefile,后者会清除许多 LOCAL_XXX 变量LOCAL_MODLE := CKAppSecret //LOCAL_MODULE 变量存储您要编译的模块的名称LOCAL_SRC_FILES := main.cpp //LOCAL_SRC_FILES 变量必须包含要编译到模块中的 C 和/或 C++ 源文件列表include $(BUILD_SHARED_LIBRARY) /* 此变量指向的编译脚本用于收集您在 LOCAL_XXX 变量中提供的模块的所有相关信息,以及确定如何根据您列出的源文件编译目标共享库。请注意,使用此脚本要求您至少已经为 LOCAL_MODULE 和 LOCAL_SRC_FILES 赋值。共享库变量会导致编译系统生成扩展名为 .so 的库文件。*/
BUILD_SHARED_LIBRARY
此变量指向的编译脚本用于收集您在 LOCAL_XXX 变量中提供的模块的所有相关信息,以及确定如何根据您列出的源文件编译目标共享库。
BUILD_STATIC_LIBRARY....
PREBUILT_SHARED_LIBRARY
这里的 LOCAL_SRC_FILES 值不能是源文件,而必须是指向预编译共享库的一个路径,例如 foo/libfoo.so
编译系统会根据 APP_ABI 变量所指定的每个 ABI 解析 Android.mk 一次
TARGET_ARCH
编译系统解析此 Android.mk 文件时面向的 CPU 系列。此变量是 arm、arm64、x86 或 x86_64 之一。
TARGET_PLATFORM
编译系统解析此 Android.mk 文件时面向的 Android API 级别编号。例如,Android 5.1 系统映像对应于 Android API 级别 22:android-22。
TARGET_ARCH_ABI
编译系统解析此 Android.mk 文件时面向的 ABI。
TARGET_ABI
目标 AndroidAPI 级别与 ABI 的连接。
本部分中的变量会向编译系统描述您的模块。每个模块描述都应遵守以下基本流程:
使用 CLEAR_VARS 变量初始化或取消定义与模块相关的变量。
为用于描述模块的变量赋值。
使用 BUILD_XXX 变量设置 NDK 编译系统,使其将适当的编译脚本用于该模块。
LOCAL_PATH
此变量用于指定当前文件的路径。必须在 Android.mk 文件开头定义此变量。
LOCAL_MODULE
此变量用于存储模块名称。必须在包含任何脚本(CLEAR_VARS 的脚本除外)之前定义此变量。
LOCAL_MODULE_FILENAME
为生成的模块指定自己选择的名称。
LOCAL_SRC_FILES
此变量包含编译系统生成模块时所用的源文件列表。
建议避免使用绝对文件路径;相对路径可以提高 Android.mk 文件的移植性。
LOCAL_CFLAGS
此可选变量用于设置在编译 C 和 C++ 源文件时编译系统要传递的编译器标记。这样,您就可以指定额外的宏定义或编译选项。
可以使用 LOCAL_CPPFLAGS 仅为 C++ 指定标记。
LOCAL_LDLIBS
此变量列出了在编译共享库或可执行文件时使用的额外链接器标记。
利用此变量,您可使用 -l 前缀传递特定系统库的名称
创建一个配置目标 ABI、工具链、发布/调试模式和 STL 的 Application.mk 文件。
对于其中任何您未指明的项,将分别使用以下默认值:
ABI:所有非弃用的 ABI
工具链:Clang
模式:发布
STL:系统
指令集 | 值 |
---|---|
32 位 ARMv7 | APP_ABI := armeabi-v7a |
64 位 ARMv8 (AArch64) | APP_ABI := arm64-v8a |
x86 | APP_ABI := x86 |
x86-64 | APP_ABI := x86_64 |
所有支持的 ABI(默认) | APP_ABI := all |
APP_PLATFORMAPP_PLATFORM
会声明编译此应用所面向的Android API 级别,并对应于应用的 minSdkVersion。
如果未指定,ndk-build 将以 NDK 支持的最低 API 级别为目标。最新 NDK 支持的最低 API 级别总是足够低,可以支持几乎所有使用中的设备。
APP_OPTIM
该变量可以设置为release和debug来改变生成的二进制文件的优化级别,默认为release模式。
发布模式会启用优化,并可能生成无法与调试程序一起使用的二进制文件。
调试模式会停用优化,以便可以使用调试程序。