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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容