自己買的mini小主機到了,最初的想法是在家搭建一個自己的小服務器,存儲些文件,當NAS玩,順便學學Linux。機器的配置是16G i7-8750H,有12線程,想着核數多正好可以用來跑跑編譯,幾個小時跑下來恰好可以測試一下機器的穩定性,於是開始折騰Android源碼編譯。
1. 參考資料
https://source.android.com/setup
https://blog.csdn.net/u012932409/article/details/104144461
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
https://blog.csdn.net/whereisdog/article/details/88090553
2. 准備工作
2.1. 安裝Git
下載python(一般都有,可以先試試有沒有python指令):
sudo apt-get install python
下載Git:
sudo apt-get upgrade
sudo apt-get install git
設置Git賬戶:
git config --global user.email "sandeepin@qq.com"
git config --global user.name "sandeepin"
配置PATH環境變量:
mkdir ~/bin
echo "PATH=~/bin:\$PATH" >> ~/.bashrc
source ~/.bashrc
2.2. 安裝curl庫
安裝curl用於方便后續下載文件:
sudo apt-get install curl
3. 下載源碼
3.1. 下載 repo 工具
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
3.2. 這里使用每月更新的初始化包作為源碼
網絡拉70多G的代碼不容易,所以我選擇使用每月更新的初始化包快速實現代碼下載和編譯,詳細細節請參考清華源的文檔。
下載https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,下載完成后記得根據 checksum.txt 的內容校驗一下。
由於所有代碼都是從隱藏的 .repo 目錄中 checkout 出來的,所以我們只保留了 .repo 目錄,下載后解壓 再 repo sync 一遍即可得到完整的目錄。
使用方法如下:
wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下載初始化包
tar xf aosp-latest.tar
cd AOSP # 解壓得到的 AOSP 工程目錄
# 這時 ls 的話什么也看不到,因為只有一個隱藏的 .repo 目錄
repo sync # 正常同步一遍即可得到完整目錄
# 或 repo sync -l 僅checkout代碼
此后,每次只需運行 repo sync 即可保持同步。 我們強烈建議您保持每天同步,並盡量選擇凌晨等低峰時間
Sandeepin自己的miniPC下載耗時26m33.771s,repo sync -l耗時21m31.690s,我的是機械硬盤,其實更推薦使用SSD,對后面的編譯也有好處。
4. 編譯源碼
4.1. 安裝依賴庫
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
sudo apt-get install libssl-dev
4.2. 開始編譯
通過lscpu命令查看當前cpu的詳細信息,一般設置為自己CPU核數2倍,我設為12。
執行命令:
source build/envsetup.sh
lunch 1
time make -j12
編譯的時候報錯:
網上找了很多方法:
sudo ln -s /usr/lib32/libncurses.so.6.2 /usr/lib32/libncurses.so.5
sudo ldconfig
沒有解決。
sudo apt-get install libncurses5:i386
沒有解決。
最后看到一個方法,缺少libncurses.so.5,sudo apt-get install libncurses5后還是提示clang++運行時候缺少libncurses.so.5,解決辦法:
find / -name libncurses.so.5
找到以后
sudo cp /data/android/androidnew/aosp/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/sysroot/usr/lib/libncurses.so.5 /usr/lib
終於OK,如果之后編譯再提示缺啥依賴so,也用類似方法解決。
最后終於編譯成功,303分鍾,大約5個小時,不容易啊!第一次編譯Android原生系統源碼,紀念一下!