编译机器
- ubuntu18 虚拟机
- 内存:8G
- swap:2G
如果使用的系统,或者编译的源码文件不同,可能会遇到不一样的问题
准备工作
注意:源码最好解压到目录名称较短的地方,否则会出现文件名过长的错误
sudo apt-get update
sudo apt-get install python
sudo apt-get install openjdk-8-jdk
sudo apt-get install make
加载编译环境:
source build/envsetup.sh
# 注意,这里需要自行更换
lunch aosp_arm64-eng
make -j2
错误解决
recipe for target 'ninja_wrapper' failed
url: 网上解决方案
- export LC_ALL=C
fatal internal error, exec of /usr/bin/m4 failed
- sudo apt-get install bison
注意:即便安装 bison 后,也可能会依旧出现 bison 无法找到的错误,继续执行安装:
sudo apt-get install g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev
上面是网上找的,在 ubuntu18 执行发现没有 lib32readline-gplv2-dev
这个包,应该是执行:
- sudo apt-get install g++-multilib gcc-multilib lib32ncurses5-dev lib32z1-dev
Try increasing heap size with java option '-Xmx'. Out of memory error
内存不足错误(第一步是 export 设置内存,第二部是 kill 服务,再启动,此时是不需要 make clean
清理工作区,可以直接继续编译)
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
xmllint: command not found
- sudo apt-get install libxml2-utils
运行
注意:由于启动android虚拟机要使用到硬件虚拟化,所以必须运行在 root 用户下,如果使用普通用户,则无法启用
首先切换到 root用户:
# 在虚拟机中必须切换到 su 用户,否则无法使用虚拟化
# 特别注意!!! 否则无法在虚拟机中再运行 android 虚拟机
sudo su
然后重新加载环境并运行:
source build/envsetup.sh
# (选择刚才你设置的目标版本)
lunch
emulator
如果运行出错:KVM is not installed on this machine (/dev/kvm is missing)
需要先关机后,到 VMware
虚拟机选项卡 -> 设置 -> cpu 设置 -> 勾选右侧三个虚拟化选项,然后再从新执行 上面的命令
以下是 Stack Overflow上的解决方案,但实际上我仅仅到 VMware 开启虚拟化即可,如果开启三个虚拟化选项后还是不行,可以尝试一下:
原文
sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
整理
上面编译生成比较细碎,若要直接编译成功,参考以下步骤:
使用 VMware
安装 ubuntu 18
镜像,然后到 虚拟机选项卡 -> 设置 -> cpu 设置 -> 勾选右侧三个虚拟化选项 (必须关机状态才可以修改选项)
下载 android 7.1.2 的系统源码,并将压缩包复制到虚拟机中
链接:https://pan.baidu.com/s/19PgQRT-rFFP9IBDPzZlhmA
提取码:0iu5
ubuntu18 虚拟机安装依赖:
sudo apt-get update
sudo apt-get install python openjdk-8-jdk make bison g++-multilib gcc-multilib lib32ncurses5-dev lib32z1-dev libxml2-utils
设置环境变量:
export LC_ALL=C
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
将下载的 源码文件 解压缩, 然后 cd 进入解压缩后的目录
注意:最好解压到目录名称较短的地方,否则会出现文件名过长的错误
在该目录下执行:
source build/envsetup.sh
lunch
在执行 lunch
后,会出现一个列表,这里根据需求选择要编译的镜像类型,我选的是 6
开始编译:
make -j2
等待编译成功后,开启虚拟机:
sudo su
source build/envsetup.sh
lunch
emulator
这里执行 lunch 后选择的选项必须和编译时 lunch 的选择一样
然后即可启动成功