Android.mk文件使用速通手冊(cè)
一、Android.mk文件的作用
Android.mk是 Android 工程管理文件,類(lèi)似于編譯文件的說(shuō)明書(shū),用來(lái)向編譯系統(tǒng)描述源代碼,并將源文件分組為模塊(包括靜態(tài)庫(kù)、共享庫(kù)、獨(dú)立可執(zhí)行文件)。
Android.mk 會(huì)被編譯系統(tǒng)解析一次或多次,可以在每一個(gè) Android.mk 文件中定義一個(gè)或多個(gè)模塊,也可以多個(gè)模塊使用同一個(gè) .mk 文件。
二、簡(jiǎn)單示例
下面是一個(gè)簡(jiǎn)單的 mk 文件示例,也是一個(gè) mk 文件最基本的部分,我將對(duì)其進(jìn)行詳細(xì)解析。
#源文件在開(kāi)發(fā)樹(shù)中的位置
LOCAL_PATH := $(call my-dir)
#清除LOCAL_PATH變量之外的LOCAL_XXX變量
include $(CLEAR_VARS)
#需要編譯的文件
LOCAL_SRC_FILES :=$(call all-subdir-java-files)
#生成的模塊名稱(chēng)
LOCAL_MODULE := TestMK
#編譯的標(biāo)簽
LOCAL_MODULE_TAGS := optional
#指定簽名
LOCAL_CERTIFICATE := platform
#引用靜態(tài)jar
LOCAL_STATIC_JAVA_LIBRARIES := jar1 jar2
#編譯apk
include $(BUILD_PACKAGE)
#需要進(jìn)行預(yù)編譯的庫(kù)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := jar1:path1 \
jar2:path2
include $(BUILD_MULTI_PREBUILT)2.1 定義當(dāng)前模塊的位置
LOCAL_PATH := $(call my-dir)
LOCAL_PATH 是表示當(dāng)前模塊位置的變量,my-dir 是由系統(tǒng)提供的宏函數(shù),返回當(dāng)前文件所在的路徑,$(call my-dir) 表示調(diào)用這個(gè)函數(shù)。
2.2 清除 LOCAL_XXX 變量
include $(CLEAR_VARS)
這句代碼清除了 LOCAL_PATH 變量之外的 LOCAL_XXX 變量。因?yàn)樗械木幾g控制文件都在同一個(gè) GNU MAKE 執(zhí)行環(huán)境中,所有的變量都是全局的,在編譯該模塊之前可能編譯過(guò)別的模塊,產(chǎn)生了大量變量,會(huì)被系統(tǒng)誤認(rèn)為是屬于該模塊的,可能產(chǎn)生不可預(yù)知的錯(cuò)誤。
2.3 需要編譯的文件
LOCAL_SRC_FILES :=$(call all-subdir-java-files)
LOCAL_SRC_FILES 變量代表需要編譯的文件,all-subdir-java-files 函數(shù)返回 LOCAL_PATH 子目錄的所有 java 文件。也可以直接寫(xiě)出需要編譯的文件路徑:
LOCAL_SRC_FILES :=src/com/example/test/MainActivity.java \
src/com/example/test/Demo1.java \
src/com/example/test/Demo2.java但要注意,在文件最后面加上以下語(yǔ)句,指明 LOCAL_PATH 目錄。
include $ (call all-makefiles-under,$(LOCAL_PATH))
或者在每個(gè)文件路徑下都加上 LOCAL_PATH:
LOCAL_SRC_FILES :=$(LOCAL_PATH)/src/com/example/test/MainActivity.java \
$(LOCAL_PATH)/src/com/example/test/Demo1.java \
$(LOCAL_PATH) /src/com/example/test/Demo2.java幾個(gè)常用的獲取源文件的方法:
$(call all-java-files-under, src) :獲取指定目錄下的所有 Java 文件。
$(call all-c-files-under, src) :獲取指定目錄下的所有 C 語(yǔ)言文件。
$(call all-Iaidl-files-under, src) :獲取指定目錄下的所有 AIDL 文件。
$(call all-makefiles-under, folder):獲取指定目錄下的所有 Make 文件。
2.4 定義編譯生成的模塊名稱(chēng)
LOCAL_MODULE := TestMK
LOCAL_MODULE 變量必須定義且唯一,作為模塊的標(biāo)識(shí),編譯系統(tǒng)會(huì)自動(dòng)產(chǎn)生合適的前綴和后綴。
2.5 編譯的標(biāo)簽
LOCAL_MODULE_TAGS := optional
常用的有:debug, eng, user, development 或者 optional(默認(rèn))。
2.6 簽名屬性
LOCAL_CERTIFICATE := platform
常用的有:platform:該 APK 完成一些系統(tǒng)的核心功能。經(jīng)過(guò)對(duì)系統(tǒng)中存在的文件夾的訪問(wèn)測(cè)試。shared:該 APK 需要和 home/contacts 進(jìn)程共享數(shù)據(jù)。media:該 APK 是 media/download 系統(tǒng)中的一環(huán)。
2.7 引用靜態(tài) jar 庫(kù)
LOCAL_STATIC_JAVA_LIBRARIES := jar1 jar2
jar1、jar2 是第三方 Java 包的別名,需要定義,見(jiàn)后文 2.9。LOCAL_JAVA_LIBRARIES 用于引用動(dòng)態(tài)jar。
2.8 編譯成 apk
include $(BUILD_PACKAGE)
include $(BUILD_STATIC_LIBRARY) :編譯成靜態(tài)庫(kù)include $(BUILD_SHARED_LIBRARY) :編譯成動(dòng)態(tài)庫(kù)include $(BUILD_EXECUTABLE) :編譯成可執(zhí)行程序include $(BUILD_STATIC_JAVA_LIBRARY) :編譯成 Java 靜態(tài)庫(kù)
2.9 需要進(jìn)行預(yù)編譯的庫(kù)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := jar1:path1 \
jar2:path2jar1、jar2 定義靜態(tài)庫(kù)別名,path1、path2 是靜態(tài)庫(kù)的路徑,注意要一直寫(xiě)到后綴 .jar。
2.10. 拷貝到本地編譯
include $(BUILD_MULTI_PREBUILT)
將 prebuild 定義的庫(kù)拷到本地進(jìn)行編譯。
2.11. 指定生成目錄
通過(guò) LOCAL_MODULE_PATH 變量,可以指定生成的 apk 目錄:
LOCAL_MODULE_PATH := $(TARGET_OUT)/xxx
$(TARGET_OUT) 代表 /system, 后續(xù)路徑按需要補(bǔ)充完整,如這里的 xxx。
$(TARGET_OUT_DATA_APPS) 代表 data/app 目錄。
結(jié)語(yǔ)
本文給出了一個(gè)簡(jiǎn)單的 Android.mk 文件示例,并逐行解析了一些基礎(chǔ)指令,希望對(duì)大家有所幫助,更多關(guān)于Android.mk文件使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android Bitmap的截取及狀態(tài)欄的隱藏和顯示功能
Bitmap是Android系統(tǒng)中的圖像處理中最重要類(lèi)之一。Bitmap可以獲取圖像文件信息,對(duì)圖像進(jìn)行剪切、旋轉(zhuǎn)、縮放,壓縮等操作,并可以以指定格式保存圖像文件。這篇文章主要介紹了Android Bitmap的截取及狀態(tài)欄的隱藏和顯示功能,需要的朋友可以參考下2017-11-11
android AlertDialog的簡(jiǎn)單使用實(shí)例
本篇文章主要介紹了android AlertDialog的簡(jiǎn)單使用實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01
Android中Listview下拉刷新和上拉加載更多的多種實(shí)現(xiàn)方案
本文大概通過(guò)三種方案給大家介紹了Android中Listview下拉刷新和上拉加載更多知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2016-12-12
Android動(dòng)態(tài)繪制餅狀圖的示例代碼
這篇文章主要介紹了Android動(dòng)態(tài)繪制餅狀圖的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Android Studio配合WampServer完成本地Web服務(wù)器訪問(wèn)的問(wèn)題
這篇文章主要介紹了Android Studio配合WampServer完成本地Web服務(wù)器訪問(wèn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
Android?中?FrameLayout?布局及屬性的使用詳解
這篇文章主要介紹了Android?中?FrameLayout?布局及屬性的使用,FrameLayout?在實(shí)現(xiàn)簡(jiǎn)單布局時(shí)非常方便,特別適用于疊加式布局,如顯示疊加的圖層或浮動(dòng)按鈕等,需要的朋友可以參考下2024-03-03
一些有效的Android啟動(dòng)優(yōu)化策略分享
在當(dāng)今激烈競(jìng)爭(zhēng)的移動(dòng)應(yīng)用市場(chǎng),應(yīng)用的啟動(dòng)速度直接影響著用戶(hù)的第一印象和滿(mǎn)意度,Android的啟動(dòng)優(yōu)化是開(kāi)發(fā)者必須關(guān)注的關(guān)鍵領(lǐng)域,本文將詳細(xì)介紹一些強(qiáng)大有效的Android啟動(dòng)優(yōu)化策略,幫助你優(yōu)化應(yīng)用的啟動(dòng)過(guò)程,為用戶(hù)創(chuàng)造更出色的體驗(yàn),需要的朋友可以參考下2023-08-08

