Ubuntu 18.04 WMware 編譯 AOSP android-7.1.2_r33 筆記
- 2021 年 12 月 1 日
- 筆記
- android 7.1.2, AOSP, linux, ubuntu 18.04, VMware, Android逆向, 源碼編譯
0 前言
筆者在編譯之前並沒有加入專有二進位文件(後續加入了再補充筆記),以供真機運行時一些硬體設備驅動都正常運行,詳細請參考Google官方教程://source.android.com/setup/build/downloading#obtaining-proprietary-binaries
自備出國留學工具
主機配置:
Windows 10 HOME
|I7 12700KF
|海盜船 32G DDR4 3200MHz 雙通道
|西數 SN570 1T PCIE 3.0
虛擬環境:Ubuntu 18.04 Bionic (VMware)
|8C 16G
編譯目標:NZH54D
|android-7.1.2_r33
|Pixel (sailfish)、Pixel XL (marlin)
準備開始,接下來的每個完成一個步驟,都打個備份點,方便還原編譯其它AOSP版本
1 系統安裝
虛擬機和系統安裝過程省略(網上大堆教程)…
改源
# backup sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# replace
sudo sed -i 's#//.*archive.ubuntu.com#//mirrors.aliyun.com#g' /etc/apt/sources.list
sudo sed -i 's#//.*security.ubuntu.com#//mirrors.aliyun.com#g' /etc/apt/sources.list
# update
sudo apt update
安裝常用軟體包
sudo apt install curl vim htop tmux lolcat tree
關閉螢幕休眠
設置 → 電源 → 節點 → 改為從不
2 源碼同步(環境準備)
python
sudo apt install python
git
sudo apt install git
git config --global user.email "[email protected]"
git config --global user.name "yourname"
repo
mkdir ~/bin
PATH=~/bin:$PATH
curl //mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
# curl //storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
3 源碼同步
如果不指定分支默認獲取 master,如需簽出 master 之外的其他分支,請使用 -b 指定此分支。 如需查看分支列表,請參閱源程式碼標記和 build
cd; mkdir aosp; cd aosp;
repo init -u //aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.2_r33 --repo-url=//gerrit-googlesource.lug.ustc.edu.cn/git-repo
repo sync -j8 # 同步源碼到最新狀態,-j8 是開啟八個執行緒同時下載
大概要下載100多g,聯通500M,實測耗時70分鐘左右
4 源碼編譯(環境準備)
當前記錄是針對 android 7.1.2,依賴環境如下,如果編譯更高版本,環境也許不同,所以編譯環境在下載源碼之後進行會方便VMware打備份點
jdk
sudo apt install openjdk-8-jdk
提前修復編譯時錯誤:SSL error when connecting to the Jack server. Try ‘jack-diagnose’
- sudo vim /etc/java-8-openjdk/security/java.security
- 搜索找到這行程式碼:jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
- 刪除 TLSv1, TLSv1.1, 後保存
如果沒有提前修復,而是編譯過程中報錯了再修復這個問題的話,需要在修復之後重啟 jack-admin,命令如下
- cd ~/aosp/prebuilts/sdk/tools/
- ./jack-admin kill-server
- ./jack-admin start-server
python
Ubuntu 18.04 自帶 Python 3.6.9,編譯 aosp 7.1.2 需要用 Python 2.x
如果編譯更高版本可能依賴 Python 3,命令如下,現在不需要執行
# sudo apt install python3
# sudo ln -sfn /usr/bin/python3 /usr/bin/python
其他
sudo apt install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
5 源碼編譯
開始編譯
如果在沒有參數的情況下運行,則 lunch 會提示您從菜單中選擇目標。如需了解所有現有設備的構建配置,請參閱擇設備構建系統。
make -j20 是使用多少個執行緒編譯,一般為CPU核心數×2,我這裡多給了4,實測也沒什麼問題,並且編譯速度確實提升了不少。
# cd ~/aosp
# rm -rf out
export LC_ALL=C
source build/envsetup.sh
lunch 18 # aosp_sailfish-userdebug
make -j20
編譯成功
實測耗時
8C 16G make j1635分
CPU佔用50%左右
8C 16G make j2030分
CPU佔用55%左右資源佔用和耗時比 最佳
10C 20G make j2028分
CPU佔用65%左右
12C 16G make j2427分
CPU佔用80%左右
12C 24G make j2426分
CPU佔用80%左右
輸出目錄 out/target/product/產品代號
ubuntu@ubuntu1804:~/aosp/out/target/product/sailfish$ du -h *.img
25M boot.img
6.4M ramdisk-recovery.img
1.5M ramdisk.img
825M system.img
223M system_other.img
146M userdata.img