自己买的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

编译的时候报错:

Ubuntu20编译最新版Android源码教程

网上找了很多方法:

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

Ubuntu20编译最新版Android源码教程

文章目录