Android中的Serializable、Parcelable">Android中的Serializable、Parcelable
1045
2025-03-31
什么是Android.mk?
Android.mk文件在你項(xiàng)目的jni/目錄下,它向構(gòu)建系統(tǒng)描述源代碼和動(dòng)態(tài)庫(kù),它其實(shí)是GNU makefile的簡(jiǎn)化版,用來(lái)給構(gòu)建系統(tǒng)一次或多次分析使用.Application.mk、構(gòu)建系統(tǒng)、你的環(huán)境變量未定義時(shí),Android.mk文件對(duì)于定義項(xiàng)目范圍的設(shè)置非常有用.它還可以重寫(xiě)特定模塊的項(xiàng)目范圍設(shè)置.
Android.mk用于向編譯系統(tǒng)描述源文件和共享庫(kù),Android N版本之后使用Android.bp替代Android.mk
常用語(yǔ)法
:=定義變量
$()讀取變量
include對(duì)mk文件、變量、模塊的調(diào)用
操作
對(duì)于使用者來(lái)說(shuō),只要按照清除舊變量、設(shè)置新變量、調(diào)用編譯函數(shù)這三步進(jìn)行操作就可以了。
//讀取當(dāng)前路徑 LOCAL_PATH:= $(call my-dir) //1.清除舊變量 include $(CLEAR_VARS) //2.設(shè)置新變量 LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_PACKAGE_NAME := AlarmClock //3.調(diào)用編譯函數(shù) include $(BUILD_PACKAGE)
1
2
3
4
5
6
7
8
9
10
11
12
編譯函數(shù)(實(shí)際上是mk文件)根據(jù)設(shè)置的變量來(lái)確定編譯所需要的配置信息,由于Android.mk中所有變量都是全局的,為了防止編譯函數(shù)調(diào)用錯(cuò)誤的變量,每次設(shè)置變量之前先清除原先變量的值。分成三個(gè)步驟:
清除舊變量,是因?yàn)锳ndroid.mk中所有的變量都是全局的,編譯函數(shù)在編譯時(shí)會(huì)調(diào)用這些變量。為了防止編譯函數(shù)使用了編譯其它模 塊時(shí)設(shè)置的變量,每次開(kāi)始編譯一個(gè)新的模塊時(shí)清除所有的變量是個(gè)好習(xí)慣。
設(shè)置新變量就是把本次編譯時(shí)用到的源碼地址,包名等設(shè)置好。
調(diào)用編譯函數(shù)其實(shí)就是include一個(gè)固定的mk文件,這個(gè)mk文件會(huì)根據(jù)設(shè)置的變量提取出編譯模塊需要的target,Command等信息并 執(zhí)行固定的編譯命令。
舉例
要編譯java模塊,編譯函數(shù)build_apk.mk描述如下
name := AlarmClock target := $(name).apk source := $(name).java commnd := / javac $(name).java/ java $(name).class
1
2
3
4
5
6
7
8
現(xiàn)在要編譯Contacts模塊,可以這么做:
name := Contacts include $(BUILD_PACKAGES)
1
2
定義一個(gè)專(zhuān)門(mén)用來(lái)清除變量的clear_vars.mk里面的內(nèi)容如下:
name := target := source := command :=
1
2
3
4
現(xiàn)在按照清除舊變量、設(shè)置新變量、調(diào)用編譯函數(shù)這三步進(jìn)行,可以這么做:
include $(CLEAR_VARS) name := Contacts include $(BUILD_PACKAGES)
1
2
3
其他
在Android源碼的build/core/目錄下。先看其中的main.mk,config.mk這兩個(gè)文件
main.mk里面是具體的腳本,在這里控制編譯模塊。
config.mk中定義了下面這樣的文件調(diào)用:
CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk BUILD_HOST_STATIC_LIBRARY:= $(BUILD_SYSTEM)/host_static_library.mk
1
2
做為單獨(dú)的功能模塊抽象出來(lái)的 mk文件都在build/core/目錄下,而函數(shù)的定義全部在definitions.mk中。
參考文檔:
Android.mk文件分析
Android
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。