一、變量說明:
1.LOCAL_PATH:= $(call my-dir)
此行代碼在Android.mk的開頭,用於給出當前文件的路徑
LOCAL_PATH 用於在開發樹中查找源文件
宏函數’my-dir’, 由編譯系統提供,用於返回當前路徑(即包含Android.mk file文件的目錄)
2.LOCAL_PACKAGE_NAME := SecSettings 或 LOCAL_MODULE:= SecSettings
標識在Android.mk文件中描述的每個模塊。名稱必須是唯一的且不包含空格。
注意編譯系統會自動產生合適的前綴和后綴:
靜態庫:又稱為文檔文件(Archive File),多個.o文件的集合,linux中靜態庫文件的后綴為“.a”
LOCAL_STATIC_JAVA_LIBRARIES := static-library
LOCAL_STATIC_JAVA_LIBRARIES += libSR
共享庫:多個.o文件的集合,一個被命名為'foo'的共享庫模將會生成'libfoo.so'文件。
LOCAL_SHARED_LIBRARIES := libBMapApiEngine_v1_3_5
重要注意事項:如果你把庫命名為‘libhelloworld’,編譯系統將不會添加任何的lib前綴,也會生成libhelloworld.so,這是為了支持來源於Android平台的源代碼的Android.mk文件。如果你確實需要這么做的話。
3.LOCAL_MODULE_TAGS := optional / user / eng / tests 可選定義
該模塊在所有版本下都編譯/ 該模塊只在user版本下才編譯/ 該模塊只在eng版本下才編譯/ 該模塊只在tests版本下才編譯
4.LOCAL_OVERRIDES_PACKAGES := Settings
覆蓋其他所有同名的應用
5.LOCAL_CERTIFICATE := platform 可選定義
編譯一個需要platform簽名的APK,而不是share編譯
6.LOCAL_PROGUARD_FLAG_FILES := proguard.flags
指定不需要混淆的native方法與變量的proguard.flags文件
ProGuard的主要作用就是混淆:Java的字節碼一般是非常容易反編譯的。為了很好的保護Java源代碼,我們往往會對編譯好的class文件進行混淆處理。
7.LOCAL_PROGUARD_ENABLED:= disabled
制定編譯的工程,不要使用代碼混淆的工具進行代碼混淆:
8.LOCAL_CLASSPATH := $(LOCAL_PATH)/lib/maps.jar
9.LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_SRC_FILES += src/com/android/settings/nearby/IMediaServer.aidl
變量 LOCAL_SRC_FILES 必須包含將要編譯打包進模塊中的源代碼文件
不用在這里列出頭文件和包含文件,因為編譯系統將會自動為你找出依賴型的文件;僅僅列出直接傳遞給編譯器的源代碼文件就好
10.LOCAL_RESOURCE_OVERLAY_DIR := $(LOCAL_PATH)/TN_CHN_OPEN/res
指定資源文件路徑
11.LOCAL_AAPT_FLAGS := $(SEC_DEV_APP_LOCAL_AAPT_FLAGS)
指定打包資源文件
因為Android的工具aapt在生成apk文件時默認地會編譯並壓縮res/下的文件,而一些系統文件則不需要被壓縮(否則在讀取該文件時需要解壓縮),在Android.mk文件需要指定以下選項告訴aapt工具不壓縮所的文件。
例如Android.mk文件需要指定以下選項告訴aapt工具不壓縮所有.dat文件:
LOCAL_AAPT_FLAGS := -0 .dat
二、語句解釋
1.include $(CLEAR_VARS)
CLEAR_VARS由編譯系統提供(可以在 android 安裝目錄下的/build/core/config.mk 文件看到其定義,為 CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk),因為所有的編譯控制文件都在同一個GNU MAKE執行環境中,所有的變量都是全局的,讓GNU MAKEFILE清除許多LOCAL_XXX變量,例如 :LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...
該語句的意思就是把CLEAR_VARS變量所指向的腳本文件包含進來。
2. include $(BUILD_PACKAGE)
指定編譯生成APK
3.include $(BUILD_STATIC_LIBRARY)
用於編譯一個靜態庫,將會生成一個名為lib$(LOCAL_MODULE).a的文件
靜態庫不會復制到的APK包中,但是能夠用於編譯共享庫。
4.include $(BUILD_SHARED_LIBRARY)
指向編譯腳本,根據所有的在 LOCAL_XXX 變量把列出的源代碼文件編譯成一個共享庫,將生成一個名為lib$(LOCAL_MODULE).so的文件
注意:你必須至少在包含這個文件之前定義LOCAL_MODULE和LOCAL_SRC_FILES
5.$(info RES_OVERLAY TN_CHN_OPEN/RES/)
相當於代碼中的log信息
6.ifneq($(filter santos10%,$(TARGET_PRODUCT)),)
##############################################
endif
判斷是否含有santos10***的string,有的話,進入ifneq條件
Filter有兩個參數
7..ifneq($(filter %wifi,$(PROJECT_NAME)),)
###############################################
endif
判斷是否含有***wifi,如果有進入ifneq條件
8. +=
原來有的話不覆蓋
9.:=
之前的值清空,重新復制
10.LOCAL_RESOURCE_OVERLAY_DIR:=$(LOCAL_PAHT)/TN_CHN_OPEN/res $(LOCAL_RESOURCE_OVERLAY_DIR)
相當於
LOCAL_RESOURCE_OVERLAY_DIR := $(LOCAL_PAHT)/TN_CHN_OPEN/res
LOCAL_RESOURCE_OVERLAY_DIR += LOCAL_RESOURCE_OVERLAY_DIR(原來的)
11.ifeq($(findstring santos3g,$(PROJECT_NAME)),cantos3g)
###################################################
endif
如果PROJECT_NAME中含有santos3g,進入ifeq條件
如何查找PROJECT_NAME與TARGET_PRODUCT的值
1.到編譯log中搜索,即可得到
2.到腳本中查找,
./buildscript/build中
export PROJECT_NAME=${_BUILD_PROJECT_NAME%%_*}
而_BUILD_PROJECT_NAME就是$1
我們的輸入如果是santos103g_chn_open那么PROJECT_NAME=santos103g
12. ifeq (true,$(call spf_check, EC_PRODUCT_FEATURE_TEMP_REGION,CHN))
Check 地區是不是CHN,如果是,進入ifeq條件
三、Settings的Android.mk 的相關介紹
1.地區宏:SEC_PRODUCT_FEATURE_TEMP_REGION
ifeq (true,$(call spf_check,SEC_PRODUCT_FEATURE_TEMP_REGION,HKTW))
ifeq (true,$(call spf_check,SEC_PRODUCT_FEATURE_TEMP_REGION,CHN))
2.運營商宏:SEC_PRODUCT_FEATURE_TEMP_OPERATOR
ifeq (true,$(call spf_check,SEC_PRODUCT_FEATURE_TEMP_OPERATOR,CMCC))
ifeq (true,$(call spf_check,SEC_PRODUCT_FEATURE_TEMP_OPERATOR,CTC))
3.雙卡宏:BUILD_MULTISIM_PROJECT
SEC_PRODUCT_FEATURE_COMMON_DSDS_SUPPORT
ifeq ($(BUILD_MULTISIM_PROJECT),true)
控制雙卡相關文件路徑為:TN_MultiSIM/…
ifeq (true,$(call spf_check,SEC_PRODUCT_FEATURE_COMMON_DSDS_SUPPORT,TRUE))
控制雙卡相關文件路徑為:TN_DSDS/…
上面三個宏的定義路徑:
//JBP_MAIN/Maple/JBP98x/model/vendor/wilcoxds/SecProductFeature.wilcoxdszn
OpenGrok/android/vendor/samsung/wilcoxds/SecProductFeature.wilcoxdszn
# Region, Operator feature
SEC_PRODUCT_FEATURE_TEMP_REGION="CHN"
SEC_PRODUCT_FEATURE_TEMP_OPERATOR="CU"
#Common DSDS Feature
SEC_PRODUCT_FEATURE_COMMON_DSDS_SUPPORT=TRUE
# another micro for multisim module
SEC_PRODUCT_FEATURE_COMMON_USE_MULTISIM=TRUE
4.平台控制宏: BUILD_RIL_MARVELL_RIL
ifeq ($(BUILD_RIL_MARVELL_RIL), true)
5.項目名控制:TARGET_PRODUCT
ifneq ($(filter wilcoxds%, $(TARGET_PRODUCT)),)
