package/app/Settings/Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := Settings
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
PS:GNU Make‘功能’宏,必须通过使用'$(call )'来调用,调用他们将返回文本化的信息。
(1) LOCAL_PATH:= $(call my-dir)
一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。宏函数’my-dir’,由编译系统提供,用于返回当前路径(即包含Android.mk file文件
的目录)。
(2) Android.mk中可以定义多个编译模块,每个编译模块都是以include $(CLEAR_VARS)开始,以include $(BUILD_XXX)结束。
(2.1) include $(CLEAR_VARS)
CLEAR_VARS指的是clear_vars.mk,由编译系统提供,它会让GNU MAKEFILE为你清除除LOCAL_PATH以外的所有LOCAL_XXX变量,如LOCAL_MODULE,
LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,
所有的变量都是全局的。
(2.2) include $(BUILD_PACKAGE) # Tell it to build an APK
$(BUILD_PACKAGE)是用来编译生成package/app/下的apk。还有其他几种编译情况:
include $(BUILD_STATIC_LIBRARY) 表示编译成静态库;
include $(BUILD_SHARED_LIBRARY) 表示编译成动态库;
include $(BUILD_EXECUTABLE) 表示编译成可执行程序;
(3) LOCAL_MODULE_TAGS := optional
解析:LOCAL_MODULE_TAGS :=user eng tests optional;
user: 指该模块只在user版本下才编译;
eng: 指该模块只在eng版本下才编译;
tests: 指该模块只在tests版本下才编译;
optional:指该模块在所有版本下都编译;
取值范围debug eng tests optional samples shell_ash shell_mksh。注意不能取值user,如果要预装,则应定义core.mk。
(4) LOCAL_SRC_FILES := $(call all-java-files-under, src)
(4.1) 如果要包含的是java源码的话,可以调用all-java-files-under得到。(这种形式来包含local_path目录下的所有java文件);
(4.2) 当涉及到C/C++时,LOCAL_SRC_FILES变量就必须包含将要编译打包进模块中的C或C++源代码文件。注意,在这里你可以不用列出头文
件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。all-java-files-under宏的定义是在
build/core/definitions.mk中。
(5) LOCAL_PACKAGE_NAME := Settings
package的名字,这个名字在脚本中将标识这个app或package。
(6) LOCAL_CERTIFICATE := platform
LOCAL_CERTIFICATE 后面是签名文件的文件名,说明Settings.apk是一个需要platform
key签名的APK
(7) include $(BUILD_PACKAGE)
(8) include $(call all-makefiles-under,$(LOCAL_PATH))
加载当前目录下的所有makefile文件,all-makefiles-under会返回一个位于当前'my-dir'路径的子目录中的所有Android.mk的列表。all-makefiles-under宏的定义是在
build/core/definitions.mk中。
编译此Android.mk文件最后就生成了Settings.apk。