android編譯系統簡要分析與使用

來源:互聯網
上載者:User

標籤: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編譯系統簡要分析與使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.