AOSP源碼編譯及刷入Nexus 5

看到的一篇比較靠譜的AOSP源碼編譯和刷機實戰文章。轉自:https://blog.csdn.net/u012417380/article/details/73196722

一、下載專有的二進制文件

目前網絡上的中文教程以及出版的書籍幾乎都是直接編譯AOSP源碼用模擬器加載啟動鏡像。但是要想讓用AOSP源碼編譯出的系統鏡像在特定的設備中運行,僅僅編譯AOSP分支的源代碼是不夠的,必須下載相應的與硬件相關的其他專有庫。

下載專用的二進制源碼

由于我使用的是NEXUS 5 設備,并且打算編譯Android 4.4.4_r1版本,所以去官方 Nexus 和 Pixel 設備的二進制驅動下載頁面:https://developers.google.com/android/drivers?下載了相應的二進制驅動。

三個鏈接下載的三個驅動文件?

解壓專有二進制文件

將三個壓縮包解壓出的自解壓腳本放在源碼樹的根目錄下并運行?

運行后,會提示你查看證書,按Enter鍵一行行的查看,出現下面的輸入提示時,輸入?I ACCEPT,解壓到了vendor?目錄下。其它兩個自解壓腳本也是這樣執行

解壓后的目錄:?

這三個.sh自解壓文件執行下來按Enter按的痛苦么?很痛苦!!!于是我看了看這三個文件的結構:

把第254行改為'if test "$typed" = I\ ACCEPT'就可以一路Enter到底至解壓了。感興趣的可以踩踩這個坑兒,成功后告訴我~

清理

命令刪除所有以前編譯操作的已有輸出:

$ make clobber

二、設置環境

使用?build目錄中的envsetup.sh?腳本初始化環境

$sourcebuild/envsetup.sh

$ . build/envsetup.sh

三、選擇目標

使用lunch選擇要編譯的目標。確切的配置可作為參數進行傳遞。例如以下命令(只是舉例,不用執行):

$ lunch aosp_arm-eng//該命令表示針對模擬器進行完整編譯,并且所有調試功能均處于啟用狀態。

不設置參數直接運行lanch的話,會提示從菜單中選擇一個目標?

所有編譯目標都采用?BUILD-BUILDTYPE形式,其中?BUILD?是表示特定功能組合的代號。

BUILDTYPE?是以下類型之一:?

三者具體差異Google也在官方文檔中給出了說明:https://source.android.com/source/building

模擬器一般選eng,調試功能全開。?

調試真機的話選userdebug?。?

發行最終版本用user?。

官方給出了一份自己出廠設備的代號和編譯配置選項?

我們用的設備是NEXUS 5 ,所以lanch?編譯配置為aosp_hammerhead-userdebug

四、編譯代碼

我們使用make命令來編譯代碼,為了提高編譯速度,GNU Make 可以借助 -jN 參數處理并行任務,通常使用的任務數 N 介于編譯時所用計算機上硬件線程數的 1-2 倍之間。

我們來查看自己計算機上的核心數:

aosp444@aosp444-virtual-machine:~$ cat /proc/cpuinfo| grep processor

可看到自己創建的虛擬機CPU核心共有 4 個,那么要實現最快的編譯速度,可以使用介于?make -j4?到?make -j8之間的命令。

運行下面的命令進行編譯:

make-j8

在虛擬機中編譯了4小時左右,編譯結束。?

編譯后輸出的文件都放在了源碼根目錄下的out文件中,編譯后生成的文件:

五、刷入目標設備

那么我們刷機刷入哪些生成的文件呢?

事實上,我之前已經下載了Nexus 5官方進行鏡像包進行了刷機,可參考我寫的這篇文章:NEXUS 5 工廠鏡像刷機教程及刷機包目錄解析?,萬一自己編譯的系統刷機失敗,可刷官方刷機包來救急。

下面是官方刷機包的目錄:

對比我們編譯生成的文件,我們知道編譯的可刷機的文件有boot.img、system.img、recovery.img、cache.img、userdata.img五個鏡像文件。

當我們編譯前執行source build/envsetup.sh?、lanch aosp_hammerhead-userdebug?兩條命令時,腳本已經為我們自動設置好了環境變量和編譯選項,其中·lanch命令為我們設置好了ANDROID_PRODUCT_OUT變量的值。adb、fastboot工具 的路徑也被設置好了。

1.檢查輸出目錄變量的值

我們在刷機前輸出ANDROID_PRODUCT_OUT變量的值,確保它的值和編譯后鏡像輸出目錄的路徑值一致。如果不一致的話,重新設置ANDROID_PRODUCT_OUT的值與編譯后鏡像輸出目錄路徑值一致。

2.用USB數據線連接手機

用USB數據線連接手機連接手機與虛擬機,無法識別的話需要設置USB選項,具體參考上一篇USB環境變量配置.?

3.以fastboot 模式啟動手機,進行設備解鎖

默認情況下,Nexus 5是上鎖無法刷入鏡像的,需要我們解鎖,解鎖會擦除手機數據的,最好先備份用戶數據。在開機的情況下,輸入命令進入bootloader?模式

aosp444@aosp444-virtual-machine:~/Android444_r1$ adb reboot bootloader

輸入下面的命令進行解鎖:

aosp444@aosp444-virtual-machine:~/Android444_r1$ fastboot oem unlock

按上下音量鍵選擇YES選項,再按電源鍵確認就解鎖成功了?

4.刷入鏡像

輸入下面的命令進行刷機

aosp444@aosp444-virtual-machine:~/Android444_r1$ fastboot-wflashall

這時,會刷入boot.img、system.img、recovery.img、cache.img、userdata.img五個鏡像文件

然后手機會重啟1-2次,直至進入系統界面。原汁原味~?

5.以fastboot 模式啟動手機,進行設備上鎖

在開機的情況下,再次輸入命令進入bootloader?模式,進行設備上鎖

aosp444@aosp444-virtual-machine:~/Android444_r1$ adb reboot bootloader

aosp444@aosp444-virtual-machine:~/Android444_r1$ fastboot oemlock

上鎖成功后按電源鍵啟動設備。至此我編譯android系統4.4.4_r1源碼輸入Nexus 5 設備。

另外一篇比較好的文章:https://c55jeremy-tech.blogspot.com/2019/04/aosppixel-2-romrom.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。