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