下面这段是原生Music的Android.mk文件的内容,根据该内容讲解一下如下
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src) \
src/com/android/music/IMediaPlaybackService.aidl
LOCAL_PACKAGE_NAME := Music
LOCAL_SDK_VERSION := current
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
include $(BUILD_PACKAGE)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
- LOCAL_PATH:指定要编译模块的绝对路径,绝对路径可以通过编译中枢定义的函数my-dir获取。
- LOCAL_MODULE_TAGS:指定编译模块所述的标签。标签是在中枢定义的,各个模块只能指定自己属于哪个标签,编译中枢会按照标签进行归类。常见的标签有:user、eng、userdebug、optional。在源码build/core/package.mk中标注如下:# Package LOCAL_MODULE_TAGS default to optional,即编译apk时,LOCAL_MODULE_TAGS的默认值是optional。
- LOCAL_SRC_FILES:指定要编译模块的所有源文件。all-java-files-under是编译中枢定义的函数可以获取所有的java文件。但是不能搜索到aidl文件,因此如果源码中包含aidl文件,还需要手工在Android.mk中说明。如src/com/android/music/IMediaPlaybackService.aidl。也可以使用$(call all-Iaidl-files-under, <src>) 获取指定目录下的所有 AIDL 文件。
- LOCAL_PACKAGE_NAME:指定项目名称。该变量名值适用于Java项目,对已C/C++下项目,则使用变量LOCAL_MODULE。
- BUILD_PACKAGE:该变量可以解释为一个宏,它不需要被赋值,因为中枢已经给该变量赋值了。标明编译的目标是apk对象。BUILD_EXECUTABLE变量标明要编译的目标是可执行对象,BUILD_STATIC_LIBRARY变量标明是要编译一个静态库对象。