下載 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 還會有同樣的錯誤,所以每次啟動都需要重新配一下環境
成功運行
成功運行界面如下: