Android手机mm开头的大文件,[2018年最新整理]2Android源代码编译命令m和mm和mmm以及make分析.doc...
[2018年最新整理]2Android源代碼編譯命令m和mm和mmm以及make分析
老羅的新浪微博:/shengyangluo,歡迎關(guān)注!
在前文中,我們分析了Android編譯環(huán)境的初始化過程。Android編譯環(huán)境初始化完成后,我們就可以用m/mm/mmm/make命令編譯源代碼了。當(dāng)然,這要求每一個(gè)模塊都有一個(gè)Android.mk文件。Android.mk實(shí)際上是一個(gè)Makefile腳本,用來描述模塊編譯信息。Android編譯系統(tǒng)通過整合Android.mk文件完成編譯過程。本文就對(duì)Android源代碼的編譯過程進(jìn)行詳細(xì)分析。
??????? 從前面Android編譯系統(tǒng)環(huán)境初始化過程分析這篇文章可以知道,lunch命令其實(shí)是定義在build/envsetup.sh文件中的函數(shù)lunch提供的。與lunch命令一樣,m、mm和mmm命令也分別是由定義在build/envsetup.sh文件中的函數(shù)m、mm和mmm提供的,而這三個(gè)函數(shù)又都是通過make命令來對(duì)源代碼進(jìn)行編譯的。事實(shí)上,命令m就是對(duì)make命令的簡(jiǎn)單封裝,并且是用來對(duì)整個(gè)Android源代碼進(jìn)行編譯,而命令mm和mmm都是通過make命令來對(duì)Android源碼中的指定模塊進(jìn)行編譯。接下來我們就先分別介紹一下函數(shù)m、mm和mmm的實(shí)現(xiàn),然后進(jìn)一步分析它們是如何通過make命令來編譯代碼的。
??????? 函數(shù)m的實(shí)現(xiàn)如下所示:
function?m()??
{??
????T=$(gettop)??
????if?[?"$T"?];?then??
????????make?-C?$T?$@??
????else??
????????echo?"Couldn't?locate?the?top?of?the?tree.??Try?setting?TOP."??
????fi??
}??
?????? 函數(shù)m調(diào)用函數(shù)gettop得到的是Android源代碼根目錄T。在執(zhí)行make命令的時(shí)候,先通過-C選項(xiàng)指定工作目錄為T,即Android源代碼根目錄,接著又將執(zhí)行命令m指定的參數(shù)$@作為命令make的參數(shù)。從這里就可以看出,命令m實(shí)際上就是對(duì)命令make的簡(jiǎn)單封裝。
?????? 函數(shù)mm的實(shí)現(xiàn)如下所示:
function?mm()??
{??
????#?If?we're?sitting?in?the?root?of?the?build?tree,?just?do?a??
????#?normal?make.??
????if?[?-f?build/core/envsetup.mk?-a?-f?Makefile?];?then??
????????make?$@??
????else??
????????#?Find?the?closest?Android.mk?file.??
????????T=$(gettop)??
????????local?M=$(findmakefile)??
????????#?Remove?the?path?to?top?as?the?makefilepath?needs?to?be?relative??
????????local?M=`echo?$M|sed?'s:'$T'/::'`??
????????if?[?!?"$T"?];?then??
????????????echo?"Couldn't?locate?the?top?of?the?tree.??Try?setting?TOP."??
????????elif?[?!?"$M"?];?then??
????????????echo?"Couldn't?locate?a?makefile?from?the?current?directory."??
????????else??
????????????ONE_SHOT_MAKEFILE=$M?make?-C?$T?all_modules?$@??
????????fi??
????fi??
}??
??????? 函數(shù)mm首先是判斷當(dāng)前目錄是否就是Android源碼根目錄,即當(dāng)前目錄下是否存在一個(gè)build/core/envsetup.mk文件和一個(gè)Makefile文件。如果是的話,就將命令mm當(dāng)作是一個(gè)普通的make命令來執(zhí)行。否則的話,就調(diào)用函數(shù)findmakefile從當(dāng)前目錄開始一直往上尋找是否存在一個(gè)Android.mk文件。如果在尋找的過程中,發(fā)現(xiàn)了一個(gè)Android.mk文件,那么就獲得它的絕對(duì)路徑,并且停止上述尋找過程。
??????? 由于接下來執(zhí)行make命令時(shí),我們需要指定的是要編譯的Android.mk文件的相對(duì)于Android源碼根目錄路徑,因此函數(shù)mm需要將剛才找到的Android.mk絕對(duì)文件路徑M中與Android源碼根目錄T相同的那部分路徑去掉。這是通過sed命令
總結(jié)
以上是生活随笔為你收集整理的Android手机mm开头的大文件,[2018年最新整理]2Android源代码编译命令m和mm和mmm以及make分析.doc...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 债券相当于借条吗?债券是靠什么赚钱的?
- 下一篇: 按钮开关java代码,Android自定