標籤:android style blog http ar color 使用 sp java
開發Linux編程的程式員都清楚,Makefile是一個很重要的檔案,該檔案一個重要作用就是指定了編譯規則。如此龐大的android系統源碼當然也不例外了。
android源碼中Android.mk就充當了Makefile的角色。android系統的編譯系統太過複雜了,沒辦法,那些可都是Google裡面的大牛們寫的,對於我等程式員來說,首先最重要的就是會用啊,老闆不關心你知識淵博與否,就關心你能不能搞定問題,至於如何搞定老闆不關心。所以這裡我只是簡單的介紹下android的編譯系統,目的很簡單,如果要添加一個新平台的話,知道看哪些檔案,修改哪些檔案就可以了。
編譯android系統的三大步驟。
source build/envsetup.sh
上面的命令引入了 build/envsetup.sh指令碼。該指令碼的作用是初始化編譯環境,並引入一些輔助的 Shell 函數,這其中就包括第二步中選擇目標所用的lunch 函數。除此之外,該檔案中還定義了其他一些常用的函數,如下所示:
| 名稱 |
說明 |
| croot |
切換到源碼樹的根目錄 |
| m |
在源碼樹的根目錄執行 make |
| mm |
Build 目前的目錄下的模組 |
| mmm |
Build 指定目錄下的模組 |
| cgrep |
在所有 C/C++ 檔案上執行 grep |
| jgrep |
在所有 Java 檔案上執行 grep |
| resgrep |
在所有 res/*.xml 檔案上執行 grep |
| godir |
轉到包含某個檔案的目錄路徑 |
| printconfig |
顯示當前 Build 的配置資訊 |
| add_lunch_combo |
在 lunch 函數的菜單中添加一個條目 |
lunch full-eng
第二步是調用 lunch 函數,並指定參數為“full-eng”。lunch 函數的參數用來指定此次編譯的目標裝置以及編譯類型。在這裡,這兩個值分別是“full”和“eng”。“full”是 Android 源碼中已經定義好的一種產品,是為模擬器而設定的。而編譯類型會影響最終系統中包含的模組,所示是三種編譯類型,前面的文章只是稍微提了一下:
| 名稱 |
說明 |
| eng |
預設類型,該編譯類型適用於開發階段。 當選擇這種類型時,編譯結果將:
- 安裝包含 eng, debug, user,development 標籤的模組
- 安裝所有沒有標籤的非 APK 模組
- 安裝所有產品定義檔案中指定的 APK 模組
|
| user |
該編譯類型適合用於最終發布階段。 當選擇這種類型時,編譯結果將:
- 安裝所有帶有 user 標籤的模組
- 安裝所有沒有標籤的非 APK 模組
- 安裝所有產品定義檔案中指定的 APK 模組,APK 模組的標籤將被忽略
|
| userdebug |
該編譯類型適合用於 debug 階段。 該類型和 user 一樣,除了:
- 會安裝包含 debug 標籤的模組
- 編譯出的系統具有 root 存取權限
|
首先在android源碼的根目錄下有一個makefile檔案,如所示,可知其指向了build/core/中的main.mk。
android編譯系統簡要分析與使用