日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android手机mm开头的大文件,[2018年最新整理]2Android源代码编译命令m和mm和mmm以及make分析.doc...

發布時間:2023/12/10 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。