ubuntu 18 编译 android 7 系统镜像

ubuntu 18 编译 android 7 系统镜像

编译机器

  • 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 的选择一样

然后即可启动成功

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://zwc365.com/2020/08/12/ubuntu18-build-android7