vmware和ubuntu编译运行aosp

下载 AOSP

下载每月更新的初始化包

在 window 上直接使用迅雷下载,地址 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar

将 aosp-latest.tar 移动到虚拟机中

直接拖拽 aosp-latest.tar 文件到 ubuntu 虚拟机准备好的文件目录下,但需要注意下面的问题

移动到虚拟机中遇到的问题

在我拖拽完成后,进入之前准备好的目录发现并没有 aosp-latest.tar 文件,可能是复制错了路径,而使用 df -h 命令查看磁盘使用情况,发现 /dev/sda1 已经占用了 131G,说明文件是复制过来了


image-20211112105412784.png

在主目录下使用 du -h --max-depth=1 查看各目录的磁盘占用情况


image-20211112105743829.png

发现是 .cache 文件夹占用了 124G ,因此进入到此文件夹,进入后再次使用 du -h --max-depth=1 查看各目录的磁盘占用情况


image-20211112105900900.png

再次进入 124G 的文件夹,就这样一层一层的找到 aosp-latest.tar 文件,在 ~/.cache/vmware/drag_and_drop/WHI02X 目录下
image-20211112110005661.png

将找到的 aosp-latest.tar 文件移动到准备好的目录

hjh616@ubuntu:~/.cache/vmware/drag_and_drop/WHI02X$ mv aosp-latest.tar ~/androidSource/

安裝repo工具

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

repo的运行过程中会尝试访问官方的git源更新自己,一般无法正常访问,如果想使用tuna的镜像源进行更新,要将如下内容复制到你的~/.bashrc里

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

然后重启终端模拟器,重启后还需要再次执行 PATH=~/bin:$PATH,否则找不到repo

解压并同步 AOSP 代码

使用以下命令:

tar xf aosp-latest.tar
cd AOSP   # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录

repo sync 遇到的问题

问题一
/usr/bin/env: ‘python’: No such file or directory

解决方法:找到 python的位置,为其创建符号连接

//查找python3的安装位置,默认会安装python3
whereis python3
//为其创建符号连接
sudo ln -s /usr/bin/python3 /usr/bin/python
问题二
repo: error: "git" is not available
repo: error: [Errno 2] No such file or directory: 'git': 'git'

Please make sure git is installed and in your path.

解决方法:安装 git

sudo apt-get install git -y
问题三
info: A new version of repo is available
warning: repo is not tracking a remote branch, so it will not receive updates
repo reset: error: Entry 'command.py' not uptodate. Cannot merge.
fatal: Could not reset index file to revision 'v2.17.1^0'.

解决方法:根据提示是文件 command.py 没有更新,因此更新一下此文件

//找到该文件目录
find . -name command.py
//进入到上一个命令找到的目录下
cd .repo/repo
//更新文件
git pull
//回到aosp目录
cd ../..

repo sync 成功后是以下界面


image-20211112232343011.png

选择对应的分支并拉出代码

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-11.0.0_r17
repo sync

repo sync -j1 --fail-fast:在遇到第一个错误的时候退出

如果不知道有哪些分支可以切换,可以进入该google官网代号标记和细分版本查看:
https://source.android.com/setup/start/build-numbers

也可以输入以下命令,查看可切换分支

cd .repo/manifests
git branch -a | cut -d / -f 3

编译准备工作

安装依赖包

为了提高软件包的安装速度,可以更换软件源为国内的源,更换方式如下

更换Linux安装源

实际上是修改一个文件,先到文件目录下

cd /etc/apt

将该文件进行备份,以免误操作

cp sources.list sources.list.bak

修改文件内容

vi /etc/apt/sources.list

在文件顶部增加以下任意一种镜像源

##阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
##网易源
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
##清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
##中科大源
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

可以通过下面的地址获取清华源的配置
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

更新软件源

sudo apt-get update

安装 jdk

sudo apt install openjdk-8-jdk

安装依赖库

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
sudo apt-get install libssl-dev

安装依赖库遇到的问题

问题一

执行 sudo apt-get install libesd0-dev 时出现

E: Unable to locate package libesd0-dev

解决方法:

## 解决libesd0-dev无法安装问题
deb http://us.archive.ubuntu.com/ubuntu/ xenial main universe
deb-src http://us.archive.ubuntu.com/ubuntu/ xenial main universe

更新软件源并重新安装

开始编译

source build/envsetup.sh
// 进行清除操作,以避免之前进行的build干扰到接下来的build
make clobber
// 选择编译开发工程师的版本,方便debug
lunch aosp_x86_64-eng
make -j4

问题

问题一:内存不足

FAILED: out/host/linux-x86/bin/go/soong-sdk/test/test.passed
out/host/linux-x86/bin/gotestrunner -p build/soong/sdk -f out/host/linux-x86/bin/go/soong-sdk/test/test.passed -- out/host/linux-x86/bin/go/soong-sdk/test/test -test.short
test got signal killed
[100% 2/2] out/host/linux-x86/bin/soong_build out/soong/build.ninja
FAILED: out/soong/build.ninja
cd "$(dirname "out/host/linux-x86/bin/soong_build")" && BUILDER="$PWD/$(basename "out/host/linux-x86/bin/soong_build")" && cd / && env -i "$BUILDER"     --top "$TOP"     --soong_out "out/soong"     --out "out"     -o out/soong/build.ninja --globListDir build --globFile out/soong/globs-build.ninja -t -l out/.module_paths/Android.bp.list --available_env out/soong/soong.environment.available --used_env out/soong/soong.environment.used.build Android.bp
Killed
20:59:01 soong bootstrap failed with: exit status 1
ninja: build stopped: subcommand failed.

#### failed to build some targets (03:17 (mm:ss)) ####

可以通过扩大 swap 分区的方法解决,有两种方式,一个是重新建立swap分区,一个是增加swap分区,这里使用第二种方式

检查当前的分区情况

···
//或cat /proc/swaps
free -m
···


image-20211114113119769.png
增加Swap分区
//创建交换分区的文件:增加16G大小的交换分区,则命令写法如下,其中的 count 等于想要的块大小
dd if=/dev/zero of=/home/swapfile bs=1M count=16384
//设置交换分区文件,建立swap的文件系统
mkswap /home/swapfile
//立即启用交换分区文件
swapon /home/swapfile

如果要使系统开机时自启用,要在文件/etc/fstab中添加一行

/home/swapfile swap swap defaults 0 0

在 vi 打开文件,添加文件内容时出现了,输入方向键会变成 ABCD 的问题,这是 ubuntu 预装的是vim tiny版本,安装vim full版本就可以解决

sudo apt-get install vim

问题二:磁盘空间不足

要进行扩容,分为两步:

  1. 先操作 vmware 进行扩容
  2. 对其进行分区
操作 vmware 进行扩容

可以关闭虚拟机,然后根据下面的方法扩展一些空间


image-20211113111138784.png

image-20211113111247405.png
对其进行分区

通过第一步进行的虚拟磁盘扩容, Ubuntu 还不能识别扩展后的容量,如下图,还是之前的大小


image-20211113171430621.png

此时还需进行一步对其进行分区,开启虚拟机,下载 gparted 工具

//安装磁盘分区软件
apt-get install gparted
//运行磁盘分区软件
gparted
image-20211113171808867.png

填入“Maximum size”处显示的最大值


image-20211113171914130.png

点击完成


image-20211113172132374.png

点击应用
image-20211113172153633.png

点击 Close


image-20211113172242615.png

如下图,此时已经成功扩容
image-20211113172332030.png

编译成功

如图所示界面


image-20211118122009382.png

运行虚拟机

emulator

运行虚拟机 emulator 遇到的问题

问题一

emulator: ERROR: x86_64 emulation currently requires hardware acceleration!
CPU acceleration status: KVM requires a CPU that supports vmx or svm
More info on configuring VM acceleration on Linux:
https://developer.android.com/studio/run/emulator-acceleration#vm-linux
General information on acceleration: https://developer.android.com/studio/run/emulator-acceleration.

解决方法:


image-20211118150512682.png

问题二

修改完第一个问题之后,重启 ubuntu 虚拟机,再次输入 emulator 命令,得到以下报错

emulator: command not found

解决方法:是环境问题,执行下面的命令,不用再次使用 make 编译

source build/envsetup.sh
lunch aosp_x86_64-eng

再次执行 emulator 就可以了

emulator

根据上面的修改方式,成功之后,再打开一个 Terminal 窗口,执行 emulator 还会有同样的错误,所以每次启动都需要重新配一下环境

成功运行

成功运行界面如下:


image-20211118143204010.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容