下载 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,说明文件是复制过来了
在主目录下使用 du -h --max-depth=1 查看各目录的磁盘占用情况
发现是 .cache 文件夹占用了 124G ,因此进入到此文件夹,进入后再次使用 du -h --max-depth=1 查看各目录的磁盘占用情况
再次进入 124G 的文件夹,就这样一层一层的找到 aosp-latest.tar 文件,在 ~/.cache/vmware/drag_and_drop/WHI02X 目录下
将找到的 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 成功后是以下界面
选择对应的分支并拉出代码
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
···
增加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
问题二:磁盘空间不足
要进行扩容,分为两步:
- 先操作 vmware 进行扩容
- 对其进行分区
操作 vmware 进行扩容
可以关闭虚拟机,然后根据下面的方法扩展一些空间
对其进行分区
通过第一步进行的虚拟磁盘扩容, Ubuntu 还不能识别扩展后的容量,如下图,还是之前的大小
此时还需进行一步对其进行分区,开启虚拟机,下载 gparted 工具
//安装磁盘分区软件
apt-get install gparted
//运行磁盘分区软件
gparted
填入“Maximum size”处显示的最大值
点击完成
点击应用
点击 Close
如下图,此时已经成功扩容
编译成功
如图所示界面
运行虚拟机
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.
解决方法:
问题二
修改完第一个问题之后,重启 ubuntu 虚拟机,再次输入 emulator 命令,得到以下报错
emulator: command not found
解决方法:是环境问题,执行下面的命令,不用再次使用 make 编译
source build/envsetup.sh
lunch aosp_x86_64-eng
再次执行 emulator 就可以了
emulator
根据上面的修改方式,成功之后,再打开一个 Terminal 窗口,执行 emulator 还会有同样的错误,所以每次启动都需要重新配一下环境
成功运行
成功运行界面如下: