Ubuntu18.04 编译 AOSP 11 (一)

1,375 阅读3分钟

VM 安装 Ubuntu18.04 编译 AOSP 11

电脑配置 :2020版 Macbook pro i5 16G RAM

vmware 装载系统 :Ubuntu 18.04

需求 :编译 Android 11 源码

Google 建议编译 AOSP 的 电脑配置至少需要 16G 的 RAM,250G 的磁盘空间。(建议先看一遍官方文档 ,选择适合自己的方案)

我这里因为顾虑宿主系统,只分配了 8G 的 RAM,后面修改了交换空间去解决了这个内存不足的问题。 编译 Android 源码, 强烈建议 内存分配16 G 及以上 ,会少后面很多事。

我尝试过安装 Ubuntu 14.04 ,去编译Android 11 的源码, 但 Java 版本 得是openjdk 8,这里会有一个问题,适合14的jdk只有三个版本,我试了分别去安装适合系统的两个版本,两个版本都会报出需要对方版本的安装提示 ,因为能力有限,没找到合适的方法,就放弃了,如果有其他知道缘由的朋友,方便告知下。

贴出官方对于14.04 版本的建议:

Untitled.png

系统的安装这里就不贴了,打开 terminal ,输入以下命令。

一.环境配置

1.安装所需的软件包

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

2.指定 Python 版本为 Python3

使用命令查看版本

python3 --v
python —v

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2  //指定版本,并设置优先级 数字越大 权重越大

3.硬盘重新分区 (可省)

在刚开始的时候,我分配的硬盘空间其实是不够的 ,只有 200 G ,后面就出现了挂载系统,因为一些骚操作导致下载空间不够等问题 。

如果你分配的硬盘空间不够的话,在 vmware 拓展完之后, 还需要使用分区软件对进行分区。

sudo apt-get install Gparted //安装命令

安装完成之后,搜索打开

Untitled 1.png

打开应用,你可以看到分区情况和新增未分配的分区

Untitled 2.png

这里容量最大的是你的系统区, 把新增分配的空间区域分配给它。

4.下载源代码

安装repo

	sudo apt-get update
  sudo apt-get install repo

创建一个空目录

mkdir aosp
cd aosp

git的配置

git config --global user.name Your Name
git config --global user.email you@example.com

没有的话 请使用命令安装
  sudo apt-get install git

java的环境配置

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH

export _JAVA_OPTIONS=-Xmx4096m

下载源码

使用 wget 解析并下载url资源时返回了 403状态码后,我就加了个模拟的状态头, 这个方式 比直接

git clone 快点。

wget -U 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15' -O 'aosp-latest.tar' mirrors.tuna.tsinghua.edu.cn/aosp-monthl…

解压安装到 aosp 里

再分别执行这两条命令

repo init -u [https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest](https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest) -b android-11.0.0_r46

repo sync -c --no-tags

Untitled 3.png

出现这个提示 ,源码就同步完成了。

二.编译

1.进入 aosp目录下 , 初始化环境

source build/envsetup.sh make clobber

Untitled 4.png

2.lunch

Untitled 5.png

用来选编译目录的

lunch sdk_phone_x86_64 这里弃用的原因 可以翻我后面的章节

还是 用回 lunch aosp_x86_64-eng

make -j6 (m 可以使用 -jN 参数处理并行任务。如果您没有提供 -j 参数,构建系统会自动选择您认为最适合您系统的并行任务计数。)

3.交换空间的分配 (根据实际情况在编译前执行)

swap (交换空间 ) 可以用作系统的虚拟内存使用。

因为只给了 8g ,后面编译的时候,会一直报错,是内存不足的问题。

Linux 系统默认的交换空间 只有 2G, 前面内存是仅有 8G,交换空间我分了 20G ,Linux 在内存不足时使用交换空间的容量。

free -m 去查看交换空间的大小。

swapon -s 查看swap 的详情

执行sudo swapon -s命令,查看是否已经存在swap file

有的话先禁用。

sudo swapoff /swapfile

修改 swap的空间

sudo dd if=/dev/zero of=/swapfile bs=1M count=20480

前面分配的时间需要等待下,执行完命令窗口会返回的

设置文件为“swap file”类型

sudo mkswap /swapfile

查看 文件的权限

ls -lh /swapfile

修改权限

sudo chmod 600 /swapfile

挂载 (已挂载的可忽略)

sudo mkswap /swapfile

启用swapfile

sudo swapon /swapfile

free -m 再次查看内存情况

到这里 你可以再开一个 termail ,使用 top 命令查看 系统空间的使用情况。其实还没用上的。

这时需要修改系统配置

sudo vi /etc/fstab

如果已经存在了 你修改的 swapfile,查看是否和下面这条命令一样,不一样就改。

/swapfile swap swap defaults 0 0

esc shift 切换到命令输入模式。

q! 不保存退出

wq 保存退出

三.编译遇到的问题

1.内存不够,swap 关闭了

Untitled 6.png

解决方式: 修改了swap 交换空间大小

2.Java堆内存不够

Untitled 7.png

解决方式:

1).在~/.bashrc 文件 末尾加入如下命令,并wq 保存退出 。

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH

export _JAVA_OPTIONS=-Xmx4096m

2).执行 source ~/.bashrc

3).找到 aosp/build/soong/java/droidstubs.go 文件,双击打开,搜索“cmd.BuiltTool("metalava")”定位到代码处,然后新加语句:

Flag("-J-Xmx6114m").

Untitled 8.png

3.lunch sdk_phone_x86_64 的报错

Untitled 9.png

本来打算使用 sdk_phone_x86_6 这个版本去编译,试过几次 一直很慢,我没等结果以为是Java 对内存的不足,环境变量上设置后还是很慢, 后面看报错信息, 日志说 我这个编译版本缺乏文件 ,于是还是换回原来的,希望后面能跑通模拟器

android.googlesource.com/platform/bu…

漫长的等待,终于编译完成

image.png

Thanks for:

建议先看完官方文档。

source.android.com/docs/setup/…

www.jianshu.com/p/53941de91…

juejin.cn/post/684490…