宏my-dir 则由Build System提供。返回包含Android.mk的目录路径

 

#LOCAL_PATH表示当前目录的地址,一般位于include $(CLEAR_VARS)之前
LOCAL_PATH:= $(call my-dir)

#CLEAR_VARS对应的是clean_vars.mk,用于清除除了LOCAL_PATH以外的所有LOCAL_打头的变量
include $(CLEAR_VARS)

#重定向java库文件
LOCAL_JAVA_LIBRARIES := bouncycastle conscrypt telephony-common ims-common

#重定向java静态库文件
LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 android-support-v13 jsr305

#模块tag为optional,表示不管是选择了什么模式都会编译该模块
LOCAL_MODULE_TAGS := optional

#重定向本地源码
LOCAL_SRC_FILES := \
        $(call all-java-files-under, src) \
        src/com/android/settings/EventLogTags.logtags

#重定向本地资源文件
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res

#模块名
LOCAL_PACKAGE_NAME := Settings

#模块证书签名
LOCAL_CERTIFICATE := platform

#是否是特权文件
LOCAL_PRIVILEGED_MODULE := true

#使用代码混淆
LOCAL_PROGUARD_FLAG_FILES := proguard.flags

#判断是否进行增量编译
ifneq ($(INCREMENTAL_BUILDS),)
    LOCAL_PROGUARD_ENABLED := disabled
    LOCAL_JACK_ENABLED := incremental
endif

#include三个makefile文件,进项相关变量赋值
include frameworks/opt/setupwizard/navigationbar/common.mk
include frameworks/opt/setupwizard/library/common.mk
include frameworks/base/packages/SettingsLib/common.mk

#开始编译Settings模块,对应package.mk文件。感兴趣的可以进一步研究apk是怎么被编译出来的,里面还是很复杂的
include $(BUILD_PACKAGE)


# 如果使用的是mm或mmm命令单编Settings模块的话会额外include test目录下的Android.mk,用于编译测试模块。
ifeq (,$(ONE_SHOT_MAKEFILE))
include $(call all-makefiles-under,$(LOCAL_PATH))
endif

 

Function:  all-subdir-java-files
从当前目录查找所有java文件
使用范例: SRC_FILES := $(call all-subdir-java-files)

 

Function:  all-java-files-under
找出当前makefile所在目录的指定子目录里的所有java文件
$(1) 指定子目录
使用范例:SRC_FILES := $(call all-java-files-under,src tests)