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 版本的建议:
系统的安装这里就不贴了,打开 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 //安装命令
安装完成之后,搜索打开
打开应用,你可以看到分区情况和新增未分配的分区
这里容量最大的是你的系统区, 把新增分配的空间区域分配给它。
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
出现这个提示 ,源码就同步完成了。
二.编译
1.进入 aosp目录下 , 初始化环境
source build/envsetup.sh make clobber
2.lunch
用来选编译目录的
这里弃用的原因 可以翻我后面的章节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 关闭了
解决方式: 修改了swap 交换空间大小
2.Java堆内存不够
解决方式:
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").
3.lunch sdk_phone_x86_64 的报错
本来打算使用 sdk_phone_x86_6 这个版本去编译,试过几次 一直很慢,我没等结果以为是Java 对内存的不足,环境变量上设置后还是很慢, 后面看报错信息, 日志说 我这个编译版本缺乏文件 ,于是还是换回原来的,希望后面能跑通模拟器
android.googlesource.com/platform/bu…
漫长的等待,终于编译完成
Thanks for:
建议先看完官方文档。