Android 源碼下相關編譯命令及刷機


    從事Android源碼開發,對於Android Build系統下的常用編譯命令必須熟悉,現列出常用的一些命令。而關於Android Build系統的詳細介紹請參看https://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/

    引用上述鏈接中的兩段話,介紹一下Android Build系統:

整個 Build 系統中的 Make 文件可以分為三類:

[1] Build 系統核心文件,此類文件定義了整個 Build 系統的框架,而其他所有 Make 文件都是在這個框架的基礎上編寫出來的。
Build 系統核心文件全部位於 /build/core目錄下
[2] 針對某個產品(一個產品可能是某個型號的手機或者平板電腦)的 Make 文件,這些文件通常位於 device 目錄下,該目錄下又以公司名以及產品名分為兩級目錄
[3] 針對某個模塊(關於模塊后文會詳細討論)的 Make 文件。整個系統中,包含了大量的模塊,每個模塊都有一個專門的 Make 文件,這類文件的名稱統一為“Android.mk”,
該文件中定義了如何編譯當前模塊。Build 系統會在整個源碼樹中掃描名稱為“Android.mk”的文件並根據其中的內容執行模塊的編譯。

整個 Build 系統的入口文件是源碼樹根目錄下名稱為“Makefile”的文件,當在源代碼根目錄上調用 make 命令時,make 命令首先將讀取該文件。
Makefile 文件的內容只有一行:“include build/core/main.mk”。該行代碼的作用很明顯:包含 build/core/main.mk 文件。在 main.mk 文件中又會包含其他的文件,
其他文件中又會包含更多的文件,這樣就引入了整個 Build 系統。

 1、編譯整個Android系統:

source build/envsetup.sh          //初始化編譯環境,並引入一些輔助的shell函數

lunch  XXX               //編譯選項,不同的項目不同

make -j8                //開啟8個線程編譯,可任選,具體根據編譯服務器的核數而定

//上述編譯后,還需要編譯modem,一般需要先切換至modem目錄,然后執行相關腳本,不同項目也不同。
//需要說明的是,不編譯modem或者modem編譯失敗,並不影響單獨模塊的編譯;但可能會影響到刷機.

以下列出envsetup.sh中定義的常用函數,即命令如下:

名稱             說明
croot          切換到源碼樹的根目錄            

m             在源碼樹的根目錄執行 make
mm            Build 當前目錄下的模塊
mmm           Build 指定目錄下的模塊

mma            編譯當前目錄下的模塊及其依賴項
mmma            編譯指定目錄下的模塊及其依賴項

cgrep             在所有 C/C++ 文件上執行 grep
jgrep             在所有 Java 文件上執行 grep
resgrep          在所有 res/*.xml 文件上執行 grep
godir            轉到包含某個文件的目錄路徑
printconfig      顯示當前 Build 的配置信息
add_lunch_combo    在 lunch 函數的菜單中添加一個條目 

2、常用的make 目標:

make help             顯示主要的make目標

make clean             清理,等同於 rm -rf out/

make sdk            編譯出 Android 的 SDK。

make clean-sdk         清理 SDK 的編譯產物 

make update-api        更新API,    在 framework API 改動之后,需要首先執行該命令來更新 API,公開的 API 記錄在frameworks/base/api 目錄下

make bootimage         生成boot.img
    
make recoveryimage     生成recovery.img

make userdataimage     生成userdata.img

make cacheimage        生成cache.img

make systemimage      生成system.img

3、產品的編譯類型:

eng:工程機
user:最終用戶機
userdebug:調試測試機
tests:測試機

4、單獨編譯某個模塊:

(1)cd到模塊目錄(含有Android.mk),然后執行命令:mm

(2)有些模塊調用了系統的一些hide函數,因此需要在根目錄下編譯:make XXX ; 否則編譯不過,例如SystemUI.

將編譯好的模塊(也就是apk),push到設備上的步驟如下:以圖庫模塊為例。

//若設備還未root,可執行下述兩個命令
adb root        
adb remount


//執行push
adb push ...    /system/app/Gallery2/  

5、刷機:三種方式。

(1)使用平台提供的刷機軟件exe,(可視化的用戶界面)進行刷機。

(2)使用命令:

adb reboot edl       //進入刷機模式,     非高通平台可能無效

在命令行切換目錄至modem/fastboot;  點擊update_all.bat運行即可

(3)使用命令,根據需要燒錄指定鏡像img或者所有img.(這些img在out/target/product/...目錄下),燒錄一個文件的命令如下,其他同理:

adb reboot bootloader        //進入fastboot模式

fastboot flash system system文件【system.img文件全路徑】

fastboot reboot            //重啟設備

使用命令行刷機,可能出現的問題:

例如:以system.img為例.

fastboot flash system ...

sending 'system' (1048262 KB)...
FAILED (remote: data too large)
finished. total time: 0.016s

刷機出現上述問題,原因:
fastboot.exe版本太低,在sdk/platform-tools/下更新fastboot.exe

6、其他刷機命令:

(1)http://bbs.zol.com.cn/sjbbs/d1763_170025.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM