目录
代码下载
安装初始化依赖工具
配置repo工具
配置git信息
初始化仓库
配置编译环境
安装jdk
安装编译依赖
编译
初始化编译环境
选择编译目标
编译源码
启动模拟器
windows和Linux协同工作
遇到的问题解决
安装依赖冲突解决
编译时找不到libncurses.so.5库
启动模拟器失败
附:
引用:
$ sudo apt-get install curl python git
$ mkdir ~/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
repo的运行过程中会尝试访问google官方的git源更新自己,需要,可通过修改repo默认源,通过国内镜像源更新,具体操作为:在~/.bashrc文件里添加如下两行,保存退出,然后执行source ~/.bashrc更新环境变量
PATH=~/bin:$PATH
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
邮箱和姓名可以用真实的,也可以随便编一个
$ git config --global user.email "[email protected]"
$ git config --global user.name "Your Name"
$ mkdir AOSP
$ cd AOSP
$ repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
初始化完成后,目录下会有一个隐藏文件夹.repo, 切换 到.repo/manifests目录,执行 git branch -a 可以看到所有分支,目前最新的版本已经到android-r-preview-4(androidR)了,再次执行
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b +分支名便可以下载对应安卓版本的源码,本文使用的P版本,如果下载最新版本代码可忽略,不过Q(10.0)版本之后编译工具和编译步骤可能会有差异,加上--depth=1 --platform=auto参数可以大幅度增加下载速度
$ repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-9.0.0_r9 --depth=1 --platform=auto
执行repo sync -c -j4下载代码,-c参数只下载当前分支, -j4启用4个线程下载,网上都说清华大学源服务器做了限制,最多只能4个线程,多了也没用,万一下载失败为了方便看失败原因,可以把同步日志保存到文件,更新失败的话可以查看sync.log
$ repo sync -c -j4 2>&1 | tee sync.log
repo init时加上--depth=1 参数,下载的代码每个git仓只包含一个commit信息,repo sync时加上-c参数,只下载当前分支相关的代码,二者结合起来,可以大大缩小整个工程的代码,我下载android-9.0.0_r9分支,只有50G,如果按照清华大学AOSP镜像源的方法,光是下载.repo压缩文件都需要接近78G,repo sync同步出代码将超过150M,commit信息和其它分支其实都是我们不需要的,浪费了很多硬盘资源
在下载代码的同时,我们可以重新开一个终端,开始配置编译环境
sudo apt-get install openjdk-8-jdk
如果遇到问题看后面问题解决
sudo apt-get install -y 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 -y tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install -y dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install -y git-core gnupg zip curl zlib1g-dev gcc-multilib
sudo apt-get install -y libc6-dev-i386 x11proto-core-dev libx11-dev
sudo apt-get install -y unzip m4 lib32z-dev ccache libssl-dev
sudo apt-get install -y lib32ncurses5-dev
source build/envsetup.sh
我选择的是aosp_arm64-eng,根据自己需求选择
lunch aosp_arm64-eng
-j后面的参数表示使用多少个线程编译,根据自己计算机cpu支持线程数来设定,可在设备管理器->处理器查看,下面有几个就是支持几个线程,我这边使用12个线程编译了1个多小时;如果编译失败可以查看buildlog
make -j12 2>&1 | tee build.log
接下便是漫长的等待
如果中途关闭了终端,需要重新执行source build/envsetup.sh 和lunch命令才能启动模拟器
$ emulator
如果你的电脑装了代码编辑软件,不想在Linux上再装一套,又用不惯vim这类编辑软件,可以尝试将文件共享到windows上,在windows上编辑,在linux上调试,具体见ubuntu20.4安装samba
如果安装libesd0-dev时报错 ,可在/etc/apt/sources.list 中文件尾加入deb http://us.archive.ubuntu.com/ubuntu/ xenial main universe,然后执行sudo apt-get update更新,重新安装便能成功
若安装过程中提示有冲突,多半是apt源有问题,版本不对,这个我也是现在才发现,网上好多博客的国内apt源都没有标明ubuntu版本,复制过来版本对不上的话安装软件时经常报冲突,建议去个镜像源找对应版本的apt源,如清华大学镜像源,或者先将能安装的装上,然后把源换为自带的源列表
对于桌面版,直接在源列表列表选择一个合适的,我使用的aliyun,速度也挺快的,或者点选择最佳服务器自动选择一个
编译时报错:error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory,我这边直接sudo apt-get install libncurses* 暴力解决
sudo apt-get install libncurses*
emulator: ERROR: x86_64 emulation currently requires hardware acceleration!
warning的报警无关紧要,导致起不来的是ERROR的打印,在网上搜了一下没找到解决办法,都是讲Android Studio启动模拟器失败的,看到一篇文章中说需要BIOS中打开硬件虚拟化,但是我windows上的模拟器和VM虚拟机都能正常使用,说明是开了的,无意间看到VM虚拟机里处理器有个虚拟化引擎的东西,抱着试一试的心态,勾选了虚拟化Intel VT-x/EPT和AMD-V/RVI(V)选项,启动虚拟机,source build/envsetup.sh 和lunch命令,接下来就能正常启动了,接线来就可以修改呢安卓源码,开启安卓
见编译AOSP源码,安卓模拟器启动失败
http://releases.ubuntu.com/20.04/ubuntu-20.04-desktop-amd64.iso 桌面版
http://releases.ubuntu.com/20.04/ubuntu-20.04-live-server-amd64.iso 服务器版
其他版本详见 http://releases.ubuntu.com/20.04/
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
清华AOSP镜像源repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
中国科学技术大学AOSP镜像源
https://blog.csdn.net/m0_46702738/article/details/106059563
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/