一、NDK变量

1、CLEAR_VARS

指向一个编译脚本。必须在新模块前包含之。作用:清除除LOCAL_PATH外的所有环境变量 

include $(CLEAR_VARS)

2、BUILD_SHARED_LIBRARY

指向一个编译脚本,它收集自从上次调用 include $(CLEAR_VARS)后的所有LOCAL_XXX信息。

并决定如何将你列出的Source编译成一个动态库。 注意,在包含此文件前,至少应该包含:LOCAL_MODULE和LOCAL_SRC_FILES两个变量。

include $(BUILD_SHARED_LIBRARY) 

3、BUILD_STATIC_LIBRARY

收集自从上次调用include $(CLEAR_VARS)后的所有LOCAL_XXX信息。

并决定如何将你列出的Source编译成一个静态库。 静态库不能够加入到Project 或者APK中。但它可以用来生成动态库。 

include $(BUILD_STATIC_LIBRARY)


4、BUILD_EXECUTABLE

Source编译成一个可执行Native程序

include $(BUILD_EXECUTABLE)

5、PREBUILT_SHARED_LIBRARY

把这个共享库声明为 “一个” 独立的模块。

指向一个build 脚本,用来指定一个预先编译好多动态库。 与BUILD_SHARED_LIBRARY and BUILD_STATIC_LIBRARY不同,

此时模块的LOCAL_SRC_FILES应该被指定为一个预先编译好的动态库,而非源文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := foo-prebuilt     # 模块名

LOCAL_SRC_FILES := libfoo.so     # 模块的文件路径(相对于 LOCAL_PATH)

include $(PREBUILT_SHARED_LIBRARY) # 注意这里不是 BUILD_SHARED_LIBRARY

6、PREBUILT_STATIC_LIBRARY

预先编译的静态库。 同上

7、TARGET_ARCH

目标CPU架构名。如果为 “arm” 则声称ARM兼容的指令。与CPU架构版本无关

8、TARGET_PLATFORM

目标平台的名字。


二、NDK宏

有通过类似:$(call function)的方式来得到其值,它将返回文本化的信息。

1、my-dir

返回最近一次include的Makefile的路径。通常返回Android.mk所在的路径。它用来作为Android.mk的开头来定义LOCAL_PATH. 

LOCAL_PATH := $(call my-dir)

2、all-subdir-makefiles

返回一个列表,包含'my-dir'中所有子目录中的Android.mk

3、this-makefile

当前Makefile的路径

4、parent-makefile

返回include tree中父Makefile 路径。 也就是include 当前Makefile的Makefile Path

5、import-module

允许寻找并inport其它modules到本Android.mk中来。 它会从NDK_MODULE_PATH寻找指定的模块名。 

$(call import-module,<name>)

6、all-subdir-java-files

获取子目录下所有的Java文件

7、all-java-files-under

 $(call all-java-files-under, <src>) :获取指定目录下的所有java文件。

三、模块描述变量

在'include $(CLEAR_VARS)' 和 'include $(BUILD_XXXXX)'之间。必须定义此类变量。

1、LOCAL_PATH

这个值用来给定当前目录。必须在Android.mk的开始位置定义。

LOCAL_PATH := $(call my-dir)   //LOCAL_PATH不会被include $(CLEAR_VARS) 清理

2、LOCAL_MODULE

由此变量名决定最终生成的目标文件名

3、LOCAL_SRC_FILES

为Build Modules而提供的Source文件列表

4、LOCAL_CPP_EXTENSION

指出C++ 扩展名。(可选) 

LOCAL_CPP_EXTENSION := .cxx 从NDK R7后,可以写多个: 

LOCAL_CPP_EXTENSION := .cxx .cpp .cc     

5、LOCAL_C_INCLUDES

包含头文件

6、LOCAL_CFLAGS

一个可选的设置,在编译C/C++ source 时添加如Flags。

也可以指定include 目录通过:LOCAL_CFLAGS += -I<path>。 这个方法比使用LOCAL_C_INCLUDES要好

7、LOCAL_STATIC_LIBRARIES

要链接到本模块的静态库list

8、LOCAL_SHARED_LIBRARIES

要链接到本模块的动态库

9、LOCAL_LDLIBS

可以用它来添加系统库。 如 -lz:  

LOCAL_LDLIBS := -lz