自己买的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原生系统源码,纪念一下!