AOSP源码编译
下载AOSP源码
根据中科大的来:AOSP 镜像使用帮助 — USTC Mirror Help 文档
这里我用的是第二种方法,虽然不推荐,但是必须得尝试一下。
首先是下载 repo 工具:
1 |
|
如果 repo 已经下载好了,但是使用不了 repo 指令,需要重新加载环境,执行如下指令:
1 |
|
然后在桌面建一个文件夹(名称任意),并进入到该目录下:
1 |
|
在该目录下初始化仓库(可以使用 -b 来指定Android版本,我这里直接指定了Android10版本的):
1 |
|
最后同步源码树(以后只需执行这条命令来同步):
1 |
|
如果在同步中失去连接,重新执行该命令即可,它会在之前下载断开的位置开始继续下载。
编译AOSP
编译前的环境配置
在开始编译AOSP之前,我们需要配置好编译环境。
下载工具
下载 libncurses5
1
2
3
4//32-bit 机器
sudo apt-get install libncurses5:i386
//64-bit 机器
sudo apt-get install libncurses5否则会出现如下错误:
1
2
3prebuilts/clang/host/linux-x86/clang-3289846/bin/clang.real:
error while loading shared libraries: libncurses.so.5:
cannot open shared object file: No 15:44:33 ninja failed with: exit status 1安装 openjdk-8
系统内置的 openjdk-11 太新了,会报错,装个官网要求的 openjdk-8 。
华为镜像源中下载jdk,我这里下载的是 jdk-8u191-linux-x64.tar.gz。需要根据自己的虚拟机架构选择,通过以下命令可以查看虚拟机架构:
1
uname -m
然后将其解压缩到 /usr/lib/jvm 目录下(如果没有该目录就创建一下):
1
2
3
4//创建目录,存在该目录可忽略该命令
sudo mkdir /usr/lib/jvm
//解压
tar -zxvf jdk-8u191-linux-x64.tar.gz -C /usr/lib/jvm之后要给jdk配置环境,将以下命令添加到 ~/.zshrc中(普通用户目录下和root用户目录下尽量都添加) :
1
2
3
4export JAVA_HOME="/usr/lib/jvm/jdk1.8.0_191" //你自己下载的jdk所在路径
export JRE_HOME="${JAVA_HOME}/jre"
export CLASSPATH=".:${JAVA_HOME}/lib:${JRE_HOME}/lib"
export PATH="${JAVA_HOME}/bin:$PATH"最后使环境生效:
1
2source ~/.zshrc
exec $SHELL此外,如果你安装了多个版本的jdk,可以通过如下命令切换:
1
sudo update-alternatives --config java
最前面带星号的就是当前正在使用的java版本,通过键入编号选择使用哪个版本。
(参考Linux之Ubuntu18.04安装Java JDK8的三种方式_ubuntu安装jdk8_软测小生的博客-CSDN博客中的第三种方法)
下载 m4
1
sudo apt install m4
否则在编译的时候会报错,即找不到 m4 指令,如下图所示:
增大交换空间
执行如下指令:
1 |
|
增大内存
我给虚拟机开了16G内存,在编译过程中,通过htop工具查看发现内存使用情况可以达到14G左右(没截图)。当然并不是要你给这么多,而是在合适的范围内尽量给虚拟机多一点内存。
增大JVM虚拟机的堆内存
执行如下指令增大JVM的堆内存:
1 |
|
否则可能会跟我一样,在编译过程中出现如下情况:
不过没关系,这并不会导致你需要重头开始编译,解决玩这个问题之后,重新执行 make -jx 即可(x为线程数,与虚拟机的cpu核数一致就可以了,多了也没多余的核来处理)。
开始编译AOSP
打开终端控制台,进入到源码目录中,执行如下命令:
1 |
|
然后在编译前执行如下命令,用于删除构建过程中生成的所有中间文件、目标文件以及生成的可执行文件等,以便重新开始编译:
1 |
|
在这之后,执行如下命令,然后选择你所需要编译的版本(版本可详细参考刷写设备 | Android 开源项目 | Android Open Source Project (google.cn)):
1 |
|
最后开始编译:
1 |
|
当然,在100%的时候,他会执行 /device/generic/goldfish/tools/目录下的 mk_combined_img.py 文件,然后会报如下错误:
显然是由于使用python3编译python2导致的,所以也很容易解决。首先确定你下载了python2,其次修改 mk_combined_img.py 文件中的首行,将#!/usr/bin/python
改成 #!/usr/bin/python2
。
如果幸运的话,应该就可以得到如下结果,这意味着我们编译成功了!
可在 /out/target/product/generic_x86_64 目录下查看到编译出的 img 文件(generic_x86_64 是我选择的编译版本)。
参考:
死磕Android_AOSP编译过程 - 知乎 (zhihu.com)
2020年安卓源码编译指南及FART脱壳机谷歌全设备镜像发布-安全客 - 安全资讯平台 (anquanke.com)
Android 源码 (AOSP) 下载与编译 - 掘金 (juejin.cn)
AOSP 镜像使用帮助 — USTC Mirror Help 文档
Linux之Ubuntu18.04安装Java JDK8的三种方式_ubuntu安装jdk8_软测小生的博客-CSDN博客