源碼及編譯
步驟 1:創(chuàng)建一個空目錄來存放源碼:
mkdir aosp
cd aosp
步驟 2:獲取最新版本的 repo 并簽出 android-8.1.0_r1 分支:
repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r1
其中,android-8.1.0_r1
代表源碼標(biāo)記,代表我們將要獲取 Android 8.1 的源碼,如需查看其他版本的源碼標(biāo)記,可參閱 源代碼標(biāo)記和 build。
步驟 3:將 Android 源碼從默認(rèn)清單中指定的代碼庫下載到本地工作目錄:
repo sync
步驟 4:創(chuàng)建本地分支并關(guān)聯(lián) repo 上的所有倉庫:
repo start ycx-dev --all
步驟 5:使用 envsetup.sh
腳本初始化編譯環(huán)境:
source ./build/envsetup.sh
步驟 6:選擇編譯目標(biāo):
lunch aosp_arm64-eng
編譯目標(biāo)的格式說明:編譯目標(biāo)的格式是 BUILD-BUILDTYPE ,如 aosp_arm64-eng 這個目標(biāo),它的 BUILD 是 aosp_arm64,BUILDTYPE 是 eng 。
BUILD 指的是特定功能的組合的特定名稱,即表示編譯出的鏡像可以運(yùn)行在什么環(huán)境,例如 aosp_arm64-eng 中的 aosp(Android Open Source Project) 代表 Android 開源項(xiàng)目,arm 表示系統(tǒng)是運(yùn)行在 arm 架構(gòu)的處理器上的,arm64 則是指 64 位 arm 架構(gòu)處理器
想查看 Android 設(shè)備的 cpu 架構(gòu),可以執(zhí)行命令:adb shell getprop ro.product.cpu.abi
BUILDTYPE 指的是編譯類型,通常有三種:
- user:表示編譯出的系統(tǒng)鏡像版本可以用來正式發(fā)布到市場,這個版本是不能 root 的
- userdebug:在 user 版本的基礎(chǔ)上開放了 root 權(quán)限和 debug 權(quán)限
- eng:表示開發(fā)工程師版本,擁有 root 權(quán)限,此外還附帶了許多 debug 工具
如果我們在終端輸入 lunch 命令,將會列出所有的編譯目標(biāo):
步驟 7:開始編譯(設(shè)置8個線程同時編譯):
m -j8
參與編譯的線程并不是越多越好,通常是根據(jù)你機(jī)器 cup 的核心來確定,公式為:core * 2,即當(dāng)前 cpu 的核心的 2 倍。
我們可以執(zhí)行 cat /proc/cpuinfo| grep "cpu cores"| uniq
命令查看電腦 cpu 的核心數(shù)。
如果編譯過程一切順利,我們會在終端看到如下畫面,表示編譯成功!
步驟 8:如果我們 lunch 選中的編譯目標(biāo)是 1-6, 那么我們可以直接執(zhí)行如下命令運(yùn)行虛擬機(jī)看效果了:
emulator
稍等片刻,我們就可以在虛擬機(jī)上操作我們剛剛編譯成功系統(tǒng)固件了。
如果我們 lunch 選中的編譯目標(biāo)是非 1-6, 那么我們可以編譯的固件運(yùn)行在真機(jī)上,具體步驟如下。
步驟 9:進(jìn)入 fastboot 模式
adb reboot bootloader
步驟 10:解鎖引導(dǎo)加載程序
fastboot flashing unlock
步驟 11:刷寫設(shè)備
fastboot flashall -w
-w
選項(xiàng)會擦除設(shè)備上的 /data
分區(qū);該選項(xiàng)在第一次刷寫特定設(shè)備時可以加上,其他情況下不加也行。
刷寫順利的話,終端打印如下畫面,則說明刷機(jī)成功了,此時機(jī)器會自動重啟,稍等機(jī)器自動重啟即可。
如果不想刷寫所有分區(qū),可以單獨(dú)刷寫某個指定分區(qū),具體的命令為:
fastboot flash <分區(qū)名> <鏡像文件名.img>
其中,<分區(qū)名> 指的是要刷寫到哪個分區(qū),比如 system、userdata 等;<鏡像文件名.img> 指的是要刷寫的 img 文件名稱。
例如,如果想單獨(dú)刷寫 system.img,則可以輸入以下命令:
fastboot flash system system.img
刷寫完成后,不能直接簡單的重啟設(shè)備。需要執(zhí)行以下命令來重新啟動設(shè)備:
fastboot reboot
該命令會使設(shè)備從 fastboot 模式退出,并自動重啟到正常的 Android 系統(tǒng)中。
編譯問題
錯誤 1:flex-2.5.39: loadlocale.c:130:_nl_intern_locale_data
解決方法:在終端輸入命令:export LC_ALL=C,然后重新編譯即可。
錯誤 2:xmllint: command not found
解決方法:在終端輸入命令:sudo apt-get install libxml2-utils,然后重新編譯即可。
編譯單模塊并運(yùn)行
例如,我們修改了 SystemUI 模塊的代碼,需要編譯到機(jī)器上運(yùn)行看看效果,那么可以這樣,
步驟 1:在當(dāng)前源碼目錄下執(zhí)行編譯命令:
make SystemUI
稍等片刻,就可以看見編譯成功了:
步驟 2:獲得系統(tǒng)寫入權(quán)限:
adb root && adb remount
步驟 3:接下來把編譯產(chǎn)物 push 到設(shè)備上即可:
adb push out/target/product/xxx/product/priv-app/SystemUI /system/product/priv-app/
步驟 4:重啟設(shè)備上層:文章來源:http://www.zghlxwxcb.cn/news/detail-644839.html
adb shell stop && adb shell start
重啟完畢后即可看到修改后的效果了。文章來源地址http://www.zghlxwxcb.cn/news/detail-644839.html
到了這里,關(guān)于【Android】系統(tǒng)源碼下載及編譯的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!