對(duì)Android.mk的理解

      網(wǎng)友投稿 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

      對(duì)Android.mk的理解

      定義一個(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)容。

      上一篇:表單制作:打造完美的網(wǎng)頁(yè)表單
      下一篇:Python上下文管理器是怎么設(shè)計(jì)的?
      相關(guān)文章
      亚洲Av永久无码精品黑人| 亚洲六月丁香婷婷综合| 色欲aⅴ亚洲情无码AV| 亚洲中文字幕乱码一区| 国产成人精品日本亚洲网址| 亚洲高清日韩精品第一区| 亚洲国产精品乱码一区二区 | 亚洲无码高清在线观看| 亚洲高清国产拍精品青青草原| 丰满亚洲大尺度无码无码专线| 亚洲AV成人一区二区三区在线看| 亚洲av永久无码精品天堂久久| 亚洲一区精品视频在线| 亚洲中文字幕日本无线码| 久久乐国产综合亚洲精品| 亚洲一线产品二线产品| 亚洲大码熟女在线观看| 激情小说亚洲色图| 亚洲精品偷拍视频免费观看 | 亚洲AⅤ视频一区二区三区| 国内成人精品亚洲日本语音| 国产亚洲精品91| 国产精品亚洲产品一区二区三区| 伊人久久综在合线亚洲91| 九月丁香婷婷亚洲综合色| 亚洲成在人天堂在线| 亚洲欧洲自拍拍偷综合| 亚洲人妖女同在线播放| 中文字幕亚洲情99在线| 日韩色视频一区二区三区亚洲 | 亚洲国产综合专区电影在线| 亚洲成a人不卡在线观看| 亚洲成人一级电影| 亚洲欧美日韩中文二区| 自拍偷自拍亚洲精品播放| 国产L精品国产亚洲区久久| 国产亚洲精品一品区99热| 亚洲国产一区在线| 亚洲首页国产精品丝袜| 婷婷亚洲综合一区二区| 久久影院亚洲一区|