日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android.mk解析【转】

發(fā)布時間:2024/4/17 Android 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android.mk解析【转】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、變量說明:

1.LOCAL_PATH:= $(call my-dir)

此行代碼在Android.mk的開頭,用于給出當前文件的路徑

?LOCAL_PATH 用于在開發(fā)樹中查找源文件

?宏函數’my-dir’, 由編譯系統(tǒng)提供,用于返回當前路徑(即包含Android.mk file文件的目錄)

?

2.LOCAL_PACKAGE_NAME := SecSettingsLOCAL_MODULE:= SecSettings

標識在Android.mk文件中描述的每個模塊。名稱必須是唯一的且不包含空格。

注意編譯系統(tǒng)會自動產生合適的前綴和后綴:

靜態(tài)庫:又稱為文檔文件(Archive File),多個.o文件的集合,linux中靜態(tài)庫文件的后綴為“.a”

LOCAL_STATIC_JAVA_LIBRARIES?:=?static-library

LOCAL_STATIC_JAVA_LIBRARIES += libSR

共享庫:多個.o文件的集合,一個被命名為'foo'的共享庫模將會生成'libfoo.so'文件。

??????? LOCAL_SHARED_LIBRARIES := libBMapApiEngine_v1_3_5

?重要注意事項:如果你把庫命名為‘libhelloworld’,編譯系統(tǒng)將不會添加任何的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的字節(jié)碼一般是非常容易反編譯的。為了很好的保護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 必須包含將要編譯打包進模塊中的源代碼文件

不用在這里列出頭文件和包含文件,因為編譯系統(tǒng)將會自動為你找出依賴型的文件;僅僅列出直接傳遞給編譯器的源代碼文件就好

?

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/下的文件,而一些系統(tǒng)文件則不需要被壓縮(否則在讀取該文件時需要解壓縮),在Android.mk文件需要指定以下選項告訴aapt工具不壓縮所的文件。

例如Android.mk文件需要指定以下選項告訴aapt工具不壓縮所有.dat文件:

LOCAL_AAPT_FLAGS := -0 .dat

?

二、語句解釋

1.include $(CLEAR_VARS)

CLEAR_VARS由編譯系統(tǒng)提供(可以在 android 安裝目錄下的/build/core/config.mk?文件看到其定義,為 CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk),因為所有的編譯控制文件都在同一個GNU MAKE執(zhí)行環(huán)境中,所有的變量都是全局的,讓GNU MAKEFILE清除許多LOCAL_XXX變量,例如?:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES,??等等...

該語句的意思就是把CLEAR_VARS變量所指向的腳本文件包含進來。

?

2.?include?$(BUILD_PACKAGE)

指定編譯生成APK

3.include $(BUILD_STATIC_LIBRARY)

用于編譯一個靜態(tài)庫,將會生成一個名為lib$(LOCAL_MODULE).a的文件

靜態(tài)庫不會復制到的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 地區(qū)是不是CHN,如果是,進入ifeq條件

SettingsAndroid.mk 的相關介紹

1.地區(qū)宏: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)),)

?

轉載于:https://www.cnblogs.com/chenyready/p/7986749.html

總結

以上是生活随笔為你收集整理的Android.mk解析【转】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。