1.常用的一些 变量
LOCAL_PATH:= $(call my-dir)
#此行代码在Android.mk的开头,用于给出当前文件的路径,LOCAL_PATH 用于在开发树中查找源文件, 宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)
include $(CLEAR_VARS)
#CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx. 例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH. 这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。
LOCAL_SRC_FILES
#源文件列表,源文件的路径,根据LOCAL_PATH路径书写。
LOCAL_MODULE
#LOCAL_MODULE指定编译出的内容(动态库、静态库、可执行程序)的名称,该名称需要唯一且不包含空格。Build System会自动添加适当的前缀和后缀。例如,foo,要产生动态库,则生成libfoo.so. 但请注意:如果模块名被定为:libfoo.则生成libfoo.so. 不再加前缀。
LOCAL_PACKAGE_NAME
#当前APK应用的名称
LOCAL_SRC_FILES
#当前模块包含的所有源代码文件、只要列出要传递给编译器的文件即可,编译系统会自动计算依赖关系。源代码文件路径都是相当于LOCAL_PATH的,因此可以使用相对路径进行描述。
LOCAL_MODULE_TAGS := optional / user / eng / tests 可选定义
#该模块在所有版本下都编译/ 该模块只在user版本下才编译/ 该模块只在eng版本下才编译/ 该模块只在tests版本下才编译
LOCAL_OVERRIDES_PACKAGES := Settings
#覆盖其他所有同名的应用
LOCAL_JAVA_LIBRARIES
#当前模块依赖的Java共享库,也叫Java动态库,如framework.jar包。
LOCAL_STATIC_LIBRARIES
#表示该模块需要使用哪些静态库,以便在编译时进行链接。
LOCAL_SHARED_LIBRARIES
#表示模块在运行时要依赖的共享库(动态库),在链接时就需要,以便在生成文件时嵌入其相应的信息
LOCAL_STATIC_JAVA_LIBRARIES:
#当前模块以来的java静态库,在android里,导入的jar包和引用的第三方工程都属于java静态库
LOCAL_JNI_SHARED_LIBRARIES
#定义了要包含的so库文件的名字,如果程序没有采用jni,不需要
LOCAL_INIT_RC
#mk文件中通过LOCAL_INIT_RC来指明service对应的rc文件
LOCAL_C_INCLUDES:
#C或C++ 语言需要的头文件路径
LOCAL_AAPT_FLAGS
#指定打包资源文件,因为Android的工具aapt在生成apk文件时默认地会编译并压缩res/下的文件,而一些系统文件则不需要被压缩(否则在读取该文件时需要解压缩),在Android.mk文件需要指定以下选项告诉aapt工具不压缩所的文件。
2、LOCAL_CERTIFICATE := platform/shared/media 可选定义
LOCAL_CERTIFICATE : #使用平台文件签名
(1)platform签名:
AndroidManifest.xml的manifest节点中添加 android:sharedUserId=”android.uid.system”,
Android.mk中增加 LOCAL_CERTIFICATE := platform
(2)shared签名:
AndroidManifest.xml的manifest节点中增加android:sharedUserId=”android.uid.shared”,
Android.mk中增加LOCAL_CERTIFICATE := shared
(3)media签名:
AndroidManifest.xml的manifest节点中增加 android:sharedUserId=”android.media”,
Android.mk中增加 LOCAL_CERTIFICATE := media
3、LOCAL_MODULE_CLASS
LOCAL_MODULE_CLASS := EXECUTABLES #指定编译之后放置的位置:
EXECUTABLES:指示放在system/bin下,
ETC :表示放置在/system/etc下,
APPS :表示放置在/system/app目录下,
SHARED_LIBRARIES表示放置在/sysem/lib目录下。
4、include $(BUILD_PREBUILT)
include $(BUILD_PREBUILT) #这种方式把文件当成编译项目,
include $(BUILD_PACKAGE) #是用来编译生成package/app/下的apk。
include $(BUILD_STATIC_LIBRARY) #表示编译成静态库
include $(BUILD_SHARED_LIBRARY) #表示编译成动态库
include $(BUILD_EXECUTABLE) #表示编译成可执行程序
include $(BUILD_STATIC_JAVA_LIBRARY) #表示编译生成静态jar包
注意:‘:=’是赋值的意思;’+='是追加的意思;‘$’表示引用某变量的值。
5、常用的一些 函数
$(call my-dir) #获取当前文件夹的路径。
$(call all-java-files-under, <src>) #获取指定目录下的所有java文件。
$(call all-c-files-under, <src>) #获取指定目录下的所有c文件。
$(call all-Iaidl-files-under, <src>) #获取指定目录下的所有AIDL文件。
$(call all-makefiles-under, <folder>) #获取指定目录下的所有Make文件。
$(call intermediates-dir-for, <class>, <app_name>, <host or target>, <common?>) #获取Build输入的目标文件夹路径。
$(call first-makefiles-under,$(LOCAL_PATH)) #在LOCAL_PATH的所有子目录中查找.mk文件,不包括当前目录