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:
主张先看完官方文档。
source.android.com/docs/setup/…
www.jianshu.com/p/53941de91…
/post/684490…