Android源碼編譯

來源:互聯網
上載者:User

標籤:rod   使用者   ace   指令碼   包含   總結   產生   根目錄   comm   

Android源碼編譯學習小結

內容系統源碼編譯

   筆者之前在學習安卓系統源碼的編譯,為了能夠印象深刻,粗略的總結了以下內容,希望對我一樣的初學者有一些協助。

系統編譯的初始化指令

   對android編譯環境進行初始化很簡單,分為兩步。第一步開啟終端輸入source build/envseup.sh載入所需的檔案。

$ source build/envseup.shincluding device/asusource build/envseup.shs/grouper/vendorsetup.sh  including device/asus/tilapia/vendorsetup.sh  including device/generic/armv7-a-neon/vendorsetup.sh  including device/generic/armv7-a/vendorsetup.sh  including device/generic/mips/vendorsetup.sh  including device/generic/x86/vendorsetup.sh  including device/lge/mako/vendorsetup.sh  including device/samsung/maguro/vendorsetup.sh  including device/samsung/manta/vendorsetup.sh  including device/samsung/toroplus/vendorsetup.sh  including device/samsung/toro/vendorsetup.sh  including device/ti/panda/vendorsetup.sh  including sdk/bash_completion/adb.bash  

   從命令的輸出可以知道,檔案build/envsetup.sh在載入的過程中,又會在device目錄中尋找那些名稱為vendorsetup.sh的檔案,並且也將它們載入到當前終端來。另外,在sdk/bash_completion目錄下的adb.bash檔案也會載入到當前終端來,它是用來實現adb命令的bash completion功能的。也就是說,載入了該檔案之後,我們在運行adb相關的命令的時候,通過按tab鍵就可以協助我們自動完成命令的輸入。

   第二步是執行命令lunch,如下所示:

$ lunch  You‘re building on Linux  Lunch menu... pick a combo:       1. full-eng       2. full_x86-eng       3. vbox_x86-eng       4. full_mips-eng       5. full_grouper-userdebug       6. full_tilapia-userdebug       7. mini_armv7a_neon-userdebug       8. mini_armv7a-userdebug       9. mini_mips-userdebug       10. mini_x86-userdebug       11. full_mako-userdebug  userdata.img:將被掛載為 /data,包含了應用程式相關的資料以及和使用者相關的資料。     12. full_maguro-userdebug       13. full_manta-userdebug       14. full_toroplus-userdebug       15. full_toro-userdebug       16. full_panda-userdebug  Which would you like? [full-eng]   

   我們看到lunch命令輸出了一個Lunch菜單,該菜單列出了當前Android源碼支援的所有裝置型號及其編譯類型。例如,第一項“full-eng”表示的裝置“full”即為模擬器,並且編譯類型為“eng”即為工程機。

   當我們選定了一個Lunch功能表項目序號(1-16)之後,按斷行符號鍵,就可以完成Android編譯環境的初始化過程。例如,我們選擇1,可以看到以下輸出:

Which would you like? [full-eng] 1  ============================================  PLATFORM_VERSION_CODENAME=REL  PLATFORM_VERSION=4.2  TARGET_PRODUCT=full  TARGET_BUILD_VARIANT=eng  TARGET_BUILD_TYPE=release  TARGET_BUILD_APPS=  TARGET_ARCH=arm  TARGET_ARCH_VARIANT=armv7-a  HOST_ARCH=x86  HOST_OS=linux  HOST_OS_EXTRA=Linux-3.8.0-31-generic-x86_64-with-Ubuntu-13.04-raring  HOST_BUILD_TYPE=release  BUILD_ID=JOP40C  OUT_DIR=out  ============================================  

   我們可以看到,lunch命令幫我們設定好了很多環境變數。通過設定這些環境變數,就配置好了Android編譯環境。

源碼編譯指令

   在執行編譯指令之前,為了確保編譯環境的Api匹配所要編譯的源碼版本,我們會先進行make update-api進行Api更新,在此步驟之中可能會遇到各種問題,請讀者們自行上網搜尋解決,直到更新完成後執行make指令進行編譯,註:對於整個系統源碼編譯,必須在系統源碼根目錄下執行。

   在Android編譯系統在編譯過程中,會通過根目錄下的Makefile指令碼載入build/core/main.mk指令碼,接著build/core/main.mk指令碼又會載入build/core/Makefile指令碼,而Android系統鏡像檔案就是由build/core/Makefile指令碼負責打包產生的。

編譯打包過程
  1. 首先,每個模組對應一個android.mk,對應於各個模組的makefile,該檔案中只需定義一些變數,就能觸發一個模組的編譯,不同模組的編譯方式不同,當然每個模組必須遵守編譯規則;
  2. 其次,每個模組相互獨立,但是利用include指令可以將各個模組,添加如main.mk檔案中,並有先後順序,最終各個零散的makefile檔案匯聚成最終的makefile檔案;
  3. 最後,通過以上過程講所有模組編譯打包。
打包的產物

   所有的編譯產物都將位於 /out 目錄下,該目錄下主要有以下幾個子目錄:

  • /out/host/:該目錄下包含了針對主機的 Android 開發工具的產物。即 SDK 中的各種工具,例如:emulator,adb,aapt 等。
  • /out/target/common/:該目錄下包含了針對裝置的共通的編譯產物,主要是 Java 應用代碼和 Java 庫。
  • /out/target/product//:包含了針對特定裝置的編譯結果以及平台相關的 C/C++ 庫和二進位檔案。其中,是具體目標裝置的名稱。
  • /out/dist/:包含了為多種分發而準備的包,通過“make disttarget”將檔案拷貝到該目錄,預設的編譯目標不會產生該目錄。
編譯產生的鏡像檔案

   Build 的產物中最重要的是三個鏡像檔案,它們都位於 /out/target/product// 目錄下。

  • system.img:包含了 Android OS 的系統檔案,庫,可執行檔以及預置的應用程式,將被掛載為根分區。
  • ramdisk.img:在啟動時將被 Linux 核心掛載為唯讀分區,它包含了 /init 檔案和一些設定檔。它用來掛載其他系統鏡像並啟動 init 進程。
  • userdata.img:將被掛載為 /data,包含了應用程式相關的資料以及和使用者相關的資料。

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.