android學習總結:Android編譯過程及腳本的分析

這一期呢主要講的是Android編譯過程及腳本的分析,主要包括三個方面1.build/envsetup.sh 的分析  (2lunch做了什麼,如何增加或者刪除lunch
[size=10.5000pt](3)Android編譯命令使用
首先呢我們先來看一下Android的編譯過程:
[size=10.5000pt]1.初始化參數設置
[size=10.5000pt]2.檢查環境變量與目標環境
[size=10.5000pt]3.選擇lunch並讀取目標配置和平臺信息
[size=10.5000pt]4.清空輸出目錄
[size=10.5000pt]5.編譯
[size=10.5000pt]6.生成升級包
.build/envsetup.sh 的分析
當我們執行.build/envsetup.sh 這條命令時我們做了兩件事情,第一就是加載編譯命令,第二就是加載平臺信息
http://tiyubisai.com/video_news/news_135500.html
現在我們來看一下執行.build/envsetup.sh 命令前後有什麼區別,首先我們先來看一下這個腳本,他就是把一些命令加載到我們的終端上
現在我們來執行上邊的lunch命令,你會發現這裏並沒有lunch命令,相同的來執行mmm命令得到的結果是一樣的,現在我們來執行一下這個腳本
執行完之後我們會發現他include的了一些文件,這些文件在device目錄下,device目錄下的這些腳本文件其實就是當我們選擇lunch時,他要在這裏面找平臺信息,我們執行完之後我們會發現裏面多了mmmmammm、命令
當我們執行完這個腳本之後就可以執行lunch命令了
這時就會出現所有的lunch,而這些lunch信息就是從剛纔include的那些文件中加載過來的
然後我們來看一下我們在lunch時做了些什麼,打開我們的envsetup.sh,找到lunch函數
這個就是我們的lunch函數,進來之後他首先會做出一個判斷,如果lunch後面跟了參數,那麼就會直接找到了答案,直接使用哪一個分支,否則的話就會列出所有的的分支,那麼這個分支是在什麼時候加入的呢?
這裏有個lunch_menu,他所做的就是把所有的分支全部列舉出來,lunch分支保存的變量是lunch_menu_choose,那麼他是怎麼被添加的呢?我們再次尋找,會找到一個add_lunch_combo函數,他所做的就是添加lunch分支
我們再次執行.build/envsetup.sh這個命令,然後我們打開我們使用的一個腳本,也就是........fiber_a31st.......這個腳本,當我們執行時,他就會把fiber_a31st-enguser加載到環境變量中
現在我們就知道了這些分支是在什麼時候加載進來的,就是在我們在執行那個命令時加載進來的,當加載完之後我們就可以把他們打出來了,打出來以後我們就可以從裏邊進行選擇了,當我們選擇一個函數時,我們的lunch函數就會幫我們把所選擇的分支記錄下來,然後做一系列的初始化工作,,這樣我們就完成了環境變量的配置。
現在我們再來執行一下lunch函數我們現在選擇fiber_a31st-eng,這樣我們就得到了一些安卓的平臺信息
我們可以看一下我們當前的環境變量,用export命令來查看,我們可以看到多了很多安卓的一些配置
接下來我們來減少一些腳本,執行.buildenvsetup.sh命令,然後我們把我們所使用的腳本進行更改
我們把最後兩行給屏蔽掉,我們再來執行一下.buildenvsetup.sh命令,然後執行lunch命令,我們可以看到,我們所屏蔽掉的a31st的分支就不會再出現了
所以說我們可以通過修改剛纔的腳本來減少我們的分支,但是當我們想要添加一個真正的分支的時候,我們必須參考現有的分支,比如:
我們爲什麼要添加分支呢?
不管是硬件需求還是軟件需求,都是在主線版本上進行修改的,當我們需要添加或者減少一些應用和功能時,就可以通過添加分支來解決,當我們的硬件增強時,我們也可以通過添加分支來解決,這樣我們的源代碼就只有一份,我們維護起來也就更加方便了
下面我們來看一下fiber-a31st目錄下的fiber_a31st.mk做了哪些事情,他所做的就是當我們的系統編譯完之後,我們會把當前這個fiber-a31st下面的某些文件覆蓋到我們out目錄下(也就是我們編譯目標目錄下的文件)這樣我們打包時才能生成我們這個分支所需要的升級包
當我們的代碼編譯完成之後,我們對某一個模塊進行了修改,我們可以使用mm或者mmm命令對他單獨進行編譯,我們來對externnal下面的libpng進行編譯,我們首先使用mmm命令
由於我們沒有進行更新,所以他會告訴我們並沒有什麼可進行編譯的,那麼我們來對這個目錄下的某一個文件進行更新,
我們再來使用mmm命令來進行編譯,這時我們就對這個模塊進行了單獨的編譯,編譯之後他會生成一個庫文件,這個庫文件就會替換到我們得out/taeget/product/fiber-a31st/的目錄下。
當我們想要使用mm命令就必須進入到external/linpng的目錄下
我們touch一個文件,然後直接mm就能進行編譯了
這些就是mmmmm的使用過程。
最後我們來看一下當我們執行完build/envsetup.shlunch之後我們得到了哪些東西
當我們執行build/envsetup.sh時,我們首先要加載命令和分支,並且得到了mmmmm編譯命令,當我們執行lunch時,我們選擇了分支,並且配置了編譯的環境變量,而且設置了我們編譯目標碼的輸出目錄。
http://blog.csdn.net/chengfeng135/
http://blog.csdn.net/chengfeng135/article/details/49618035
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章