轉載:
Android 5.0.1(Lollipop)源碼的下載、編譯(eng版本)並燒錄到Ne,有需要的朋友可以參考下。
1.配置Linux編譯環境
安裝JDK
AOSP(AndroidOpen Source Project)需要Java7支持,在Ubuntu中使用OpenJDK,安裝方法如下:
$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk
安裝需要的包(只針對Ubuntu14.04)
$ sudo apt-get install bison g++-multilib git gperf libxml2-utils
配置USB連接和設置編譯好的output文件目錄等在此不作詳細介紹(不影響編譯效果)
2.下載Android源碼
創建Repo客戶端
①.創建新的目錄WORKING_DIRECTORY來存放工作文件:
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
②. 運行repoinit獲取最新的Repo版本(推薦),之後下載的源碼將存放在工作路徑WORKING_DIRETORY中:
$ repo init -u https://android.googlesource.com/platform/manifest
或者指定下載任一版本(Branch),在創建Repo客戶端時使用-b 選項:
$repo init -u https://android.googlesource.com/platform/manifest-b android-5.0.1_r1
(注:由於沒有安裝Repo必要軟件,會提示安裝Repo和Git相關軟件,按照提示安裝即可)
③在Repo初始化時會提示配置real name和email address,email address需要是連接到註冊的Google賬號的地址(推薦直接使用Gmail郵箱),real name在提交代碼時會顯示在代碼信息中
下載Android代碼樹
這裏運行下面一條指令直接下載上一步指定的安卓版本的源碼:
$repo sync
等吧,最快可能也要五六個小時…..好像只能開代理下…..
3.獲取硬件驅動
Google提供的所有Nexus系列設備的硬件驅動的二進制文件在以下網址中均可下載https://developers.google.com/android/nexus/drivers#makolrx22c我手中的是Nexus4,也可根據自己手機型號選擇,找到“Nexus4 binaries for Android 5.0.1(LRX22C)”,有3個硬件驅動的壓縮包,分別是qcom-mako-lrx22c-1146e92c.tgz、lge-mako-lrx22c-ad9be737.tgz、broadcom-mako-lrx22c-ea539f92.tgz
下載完成後將三個壓縮包解壓至Android源碼根目錄(WORKING_DIRECTORY),得到三個.sh文件extract-broadcom-mako.sh、extract-lge-mako.sh、extract-qcom-mako.sh,分別執行這三個shell腳本(會提示是否接受License之類的,IACCEPT即 可),會在源碼目錄下新生成一個/vendor目錄,裏面就是Nexus4所需的相關硬件驅動二進制文件
(一定要在編譯Android源碼前確保在源碼根目錄有官方提供的硬件驅動目錄vendor,否則編譯完成燒錄後reboot會因爲缺少硬件驅動卡在Google啓動畫面上)
4.編譯Android源碼
初始化編譯環境
執行初始化編譯環境的腳本:
$ source build/envsetup.sh
選擇一個Target
使用lunch指令制定編譯的target,具體的配置可以通過參數來指定,例如:
$lunch aosp_arm-eng
這行指令用來編譯一個完整的模擬器emulator,所有的debug都是開啓的。
所有的target形式都是BUILD-BUILDTYPE,其中BUILD是一個特定代碼集合的名稱,如Nexus4的代碼名稱就是occam(mako)。
BUILDTYPE即編譯的模式,有一下三種:
-user: 受限的訪問,適用於發行版的產品
-userdebug: 和”user”模式類似,但是有root權限訪問並具有debug功能,適用於debug
-eng: 工程機的模式,用於在開發配置中添加新的debug工具等
顯然,我們需要進行eng模式的編譯,Nexus4的編譯配置是:
$lunch full_mako-eng
編譯代碼
使用make指令,GNU的make指令可以通過-jN選項進行並行操作,N的設置在此不多介紹,我使用8個任務並行的指令:
$make -j8
5.解鎖Bootloader
只有在Bootloader是unlock模式下才可能燒錄定製的系統,Nexus4設備默認的Bootloader都是locked的,需要解鎖。先把Nexus4關機,然後同時按住音量的2個鍵和power鍵,進入fastbootmode,執行下面命令解鎖:
$fastboot oem unlock
官方推薦在燒錄系統前格式化cache和userdate,注意在執行下面命令前做好手機數據的備份:
$fastboot format cache
$fastboot format userdata
6.刷入Android5.0.1適配的Bootloader和基帶版本
從官方提供的出廠鏡像中可以找到合適的Bootloader和radio信息,如果不執行這步,查看“Settings->”Aboutphone”->”Baseband version”爲“unknown”,更簡單的說,打不了電話….
google factory image:https://developers.google.com/android/nexus/images
nexus4 factory image:https://developers.google.com/android/nexus/images#occamjdq39
我下的是FactoryImages “occam” for Nexus 4的5.0.1(LRX22C),.zip文件解壓後的文件信息如下:
bootloader-mako-makoz30f.img (Nexus 4 的bootloader鏡像)
flash-base.sh
flash-all.bat
image-occam-lrx22c.zip(出廠鏡像)
flash-all.sh
radio-mako-m9615a-cefwmazm-2.0.1701.05.img(Nexus 4的基帶鏡像)
把bootloader和radio刷入Nexus4,我使用了自己的路徑,注意要替換成你的路徑:
$fastbootflash bootloader/mnt/software/factory-image/occam-lrx22c/bootloader-mako-makoz30f.img
刷好bootloader後重啓進入bootloader用最新的bootloader進行燒錄radio和編譯好的rom:
$fastboot reboot-bootloader
刷入基帶radio:
$fastbootflash radio/mnt/software/factory-image/occam-lrx22c/radio-mako-m9615a-cefwmazm-2.0.1701.05.img
6.執行(for emulator)/燒錄(for Nexus 4)
模擬器運行
如果在選擇編譯模式時採用full_arm-eng或者aosp_arm-eng等的參數時可以進行模擬器運行:
$emulator
燒錄到設備(Nexus4)
完整的Android5.0.1可以通過一行簡單的命令刷入Nexus 4,它在檢測bootloader和radio版本和編譯好的Android版本匹配後把boot、recovery、system文件分區燒錄到設備中,命令裏的“-w”參數是wipe,就是把所有的user data格式化,如果有要保留的數據注意備份:
$fastboot -w flashall
燒錄完成後會reboot到開機啓動界面,Android 5.0.1的Nexus 4工程機版本的編譯燒錄全部完成,enjoy it~