VM 安装 Ubuntu18.04 编译 Aosp 11 (一)
type
status
date
slug
summary
tags
category
icon
password
notion image

配置

电脑配置 :2020版 Macbook pro i5 16G RAM
vmware 装载系统 :Ubuntu 18.04
需求 :编译 Android 11 源码
 
Google 建议编译 aosp 的 电脑配置 至少 是需要16 G 的 RAM, 250 G 的磁盘空间。
我这里因为顾虑宿主系统,只分配了 8G 的 RAM,后面修改了交换空间去解决了这个内存不足的问题。
 
编译 Android 源码, 强烈建议 内存分配16 G 及以上 ,会少后面很多事。
我尝试过安装 Ubuntu 14.04 ,去编译Android 11 的源码, 但 Java 版本 得是openjdk
8,这里会有一个问题,适合14的jdk只有三个版本,我试了分别去安装适合系统的两个版本,两个版本都会报出需要对方版本的安装提示 ,因为能力有限,没找到合适的方法,就放弃了,如果有其他知道缘由的朋友,方便告知下。
 
贴出官方对于14.04 版本的建议:
notion image
 
系统的安装这里就不贴了,打开 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
 

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

在刚开始的时候,我分配的硬盘空间其实是不够的 ,只有 200 G ,后面就出现了挂载系统,因为一些骚操作导致下载空间不够等问题 。
如果你分配的硬盘空间不够的话,在 vmware 拓展完之后, 还需要使用分区软件对进行分区。
 
sudo apt-get install Gparted //安装命令
 
安装完成之后,搜索打开
notion image
 
打开应用,你可以看到分区情况和新增未分配的分区
notion image
这里容量最大的是你的系统区, 把新增分配的空间区域分配给它。
 

4.下载源代码

 
安装repo
 
创建一个空目录
 
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' https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
解压安装到 aosp 里
 
再分别执行这两条命令
repo sync -c --no-tags
notion image
出现这个提示 ,源码就同步完成了。
 

二.编译

1.进入 aosp目录下 , 初始化环境
source build/envsetup.sh make clobber
notion image
 
lunch
notion image
用来选编译目录的
lunch sdk_phone_x86_64 这里弃用的原因 可以翻我后面的章节
还是 用回 lunch aosp_x86_64-eng
make -j6m 可以使用 -jN 参数处理并行任务。如果您没有提供 -j 参数,构建系统会自动选择您认为最适合您系统的并行任务计数。)
一般来讲,多线程编译可以选择的最佳线程是您处理器核心的4倍,逻辑线程的两倍,比如,我的编译主机CPU为4核8线程,所以我可以选择使用16线程进行编译,编译命令变成了 m -16
 

2.交换空间的分配

swap (交换空间 ) 可以用作系统的虚拟内存使用。
因为只给了 8g ,后面编译的时候,会一直报错,是内存不足的问题。
更新:内存置换空间(swap space),相当于 linux 物理内存的缓存区,不常访问的文件能放那,这样系统的就有更多的空间去跑服务,而当系统需要访问 swap 的数据,再将其加载到内存中。
 
 
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 关闭了
notion image
解决方式: 修改了swap 交换空间大小
 
2.Java堆内存不够
notion image
 
解决方式:
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
  1. 执行 source ~/.bashrc
3.找到 aosp/build/soong/java/droidstubs.go 文件,双击打开,搜索“cmd.BuiltTool("metalava")”定位到代码处,然后新加语句:
Flag("-J-Xmx6114m").
notion image
 
3.lunch sdk_phone_x86_64 的报错
notion image
本来打算使用 sdk_phone_x86_6 这个版本去编译,试过几次 一直很慢,我没等结果以为是Java 对内存的不足,环境变量上设置后还是很慢, 后面看报错信息, 日志说 我这个编译版本缺乏文件 ,于是还是换回原来的,希望后面能跑通模拟器
 
notion image
 
Thanks for:
建议先看完官方文档。
 

© Anne 2021-2024