安卓源碼AOSP下載下傳使用的正确姿勢
從同步源碼到編譯完成,整個過程應至少準備200G空間。
編譯時需要的記憶體數與編譯線程數相關,部落客實測比較極限的配置是4核8G,超過這個範圍将觸發swap交換導緻編譯速度急劇下降。
開始搞,注:以下*号所有内容替換成G00gle,至于為什麼連單詞都寫錯了你懂的。
0x01 前置準備
# 下載下傳repo
sudo apt-get install repo
# 下載下傳git并設定使用者名郵箱
sudo apt-get install git
git config --global user.name "bryan sun"
git config --global user.email "[email protected]"
# 挑選需要同步的AOSP分支
https://source.android.*.cn/setup/build-numbers
# 三行科普repo是個什麼東西
當有了版本控制思想,你用上了git。
aosp由幾百個git子項目組成,如果需要每個子項目都讓你手動去挑選版本分支,然後git pull估計得崩潰。
repo作為git的控制封裝腳本,可以對每個安卓分支版本需要搭配什麼git子項目進行清單配置,随後批量操作這些git子項目,這就是為什麼*設計了repo,一切為了操作便捷。
*在同步源碼時檢視檔案.repo/manifests/default.xml能更好體會
# 一把安裝環境
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 -y
0x02 擷取AOSP源碼包
# 方法1.通過下載下傳TUNA完整增量月包,下載下傳完後解壓隻需要簡單操作就能獲得大部分源碼,剩下的同步隻需要少量操作即可完成
# 部落客未完整實測,下一半挂了,逼着用完整同步
https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar.md5
# 解壓後得到.repo檔案夾,在根目錄repo sync即可遷出檔案
# 如果repo sync操作出現源代碼被改動提示可以用以下指令修複
repo forall -c git reset --hard HEAD
# 方法2.同步完整的源碼
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/ -b android-8.1.0_r15
# 開始同步,如果中途有網絡錯誤繼續repo sync即可
repo sync -j8
0x03 切換不同版本的AOSP
# 将repo配置重新指定為相關版本
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/ -b android-6.0.1_r67
# rm -rf有個特性不會删除隐藏目錄,切換版本操作也就是隻需要保留.repo目錄
rm -rf *
# 再次同步即可
repo sync
# 檢視分支清單
cd .repo/manifests
git branch -av
# 其中分支代碼也可以在這裡查
https://blog.csdn.net/bt_leo/article/details/78706608
0x04 編譯模拟器版本aosp并用模拟器測試
# 基于android6.0.1, Ubuntu 16.04 LTS
# 安裝openjdk7,oracle java7不能被aosp識别是以不用
sudo add-apt-repository ppa:openjdk-r/ppa
# 20200419再次使用發現執行失敗,進而Error: retrieving gpg key timed out.
# 然後通過你懂的方式上網就行了,Ubuntu這年頭都能牆,某網部你牛逼
sudo apt-get update
sudo apt-get install openjdk-7-jdk // OpenJdk 7安裝
# 跳過CCLANG的一個不相容選項,部落客實際編譯也遇到過
# 如果不修改的話會在編譯libart.so的時候error停下。
修改 art/build/Android.common_build.mk 檔案,定位到77行
将:
ART_HOST_CLANG := true
改為:
ART_HOST_CLANG := false
# 設定高速編譯啟用标志位(占硬碟,空間小可以不執行,空間換時間)
echo export USE_CCACHE=1 >> ~/.bashrc
aosp/prebuilts/misc/linux-x86/ccache/ccache -M 50G
# 導入編譯環境
source build/envsetup.sh
# 設定編譯選項
lunch
# 開幹,-j參數為編譯線程數,幸運的話睡一覺起來就OK啦。
sudo make -j4
# 一鍵設定環境變量(該指令由build/envsetup.sh導入)
set_stuff_for_environment
# 進入安卓源碼編譯生成目錄
cd out/target/product/generic
# 啟動模拟器
emulator
0x05 編譯真機并刷入
占坑
參考資料
标簽:git,編譯,安卓,aosp,repo,AOSP,源碼,https
來源: https://blog.csdn.net/DXCyber409/article/details/102765105