赞
踩
本文大部分内容均来源于皇叔的博客,我在此基础上做了汇总并添加了一些自己遇到的问题及解决方案
AOSP(Android Open Source Project)是Google主导的Android开源系统项目,我们所知的Android原生系统及国内厂商定制的ROM诸如MIUI,ColorOs等均是在此基础上开发的,中文网站是https://source.android.google.cn/。
AOSP可以说是整个现在市面上所有Android系统的起点,研究其源码可以更好地了解app到系统的底层工作原理,诸如系统启动流程,AMS,WMS,Binder等等,知其然,知其所以然,对我们不管是开发应用层还是framework层都有帮助。
曾经AOSP是支持在MacOS及Linux上进行下载与编译的,但是对MacOs的支持已经于2021年6月22日终止,我自己也是因为之前在Mac上下载编译了8.0的源码,但是因为空间不足删掉了,所以重新在Windows上进行下载编译。
Google会定期在 Ubuntu LTS (14.04) 和 Debian 测试版本中对 Android 构建系统进行内部测试,同时Android2.3以上需要使用64位环境,所以我们最好选择14.04以上版本,这里我选择的是18.04,之所以没有选择最新的20.04是因为在构建过程中遇到了一些莫名其妙的问题,后面会讲。
因为我是在win上操作的,所以想使用Ubuntu就要利用虚拟机来安装,这里虚拟机我使用的是Oracle VM VirtualBox ,版本6.1.18
ps. 进入了系统主页面,但是界面非常小看不清楚,拉大窗口也无法自动适配,我们右键更换背景进入设置页,在设置页中选择设备,将分辨率调高,我这里是1929*1200;接着在设置中找到电源,将节电改为从不,因为在后续下载编译过程比较漫长,这时系统黑屏再重新进入有几率会卡死,尤其是配置不高的电脑。
psps. 如果选择升级到20.4,然后启动黑屏,可以参考此解决方法
安装增强工具可以方便我们在本机和虚拟机之间双向复制粘贴,以及共享文件
sudo apt-get install gcc perl make
sudo apt-get install --reinstall linux-image-$(uname -r)
完成后重复刚才操作即可,重启虚拟机,欧克
按照官方文档,执行安装对应Ubuntu
版本的软件包,包括git,curl等,我这里按18.04安装:
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
不使用镜像下载的话速度太慢,原因懂得,而国内比较知名的两个镜像站,清华大学镜像站和中科大镜像站,以下我们使用清华大学的镜像
repo是Android为了管理多个git仓库而开发的Python脚本,它并不是用来取代git,而是为了开发者更好地在Android环境中使用git。
创建bin,并加入到PATH中
mkdir ~/bin
PATH=~/bin:$PATH
下载repo并设置权限
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
如果出现了如下错误:
fatal: 无法访问 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/':server certificate verification failed. CAfile: none CRLfile: none
repo: error: "git" failed with exit status 128
则执行如下指令:
git config --global http.sslverify false
git config --global https.sslverify false
最后安装Python,这里注意别安装成Python3:
sudo apt-get install python
全部完成我们重启虚拟机。
首先建立工作目录:
mkdir aosp
cd aosp
repo的运行过程中会尝试访问官方的git源更新自己,如果想使用清华的镜像源进行更新,可以将如下内容复制到你的~/.bashrc里:
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
设置git邮箱和姓名:
git config --global user.email "virus8113@gmail.com"
git config --global user.name "rockphoenix"
初始化仓库,如果是要直接下载最新的源码执行如下指令:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
如果需要某个特定版本则执行:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-9.0.0_r8
具体版本请参照Android 版本列表
最后下载:
repo sync
源码大小约为三十个g,下载完成会出现类似“100% done”的字样
系统源码中并不包含内核源码,需要另外下载
还是先创建工作目录:
mkdir kernel
cd kernel
下载,goldfish是专门用于模拟器的内核:
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
下载完成后在kernel文件夹中会生成一个goldfish文件夹,我们进入该文件夹,并查看所有分支:
cd goldfish
git branch -a
这里我们选择稳定版本goldfish3.4:
git checkout remotes/origin/android-goldfish-3.4
编译源码有整编和单编两种方式,这里我们只讨论整编
首先安装jdk,这里也可以安装jdk11,毕竟现在AGP7.0都强制jdk11了
sudo apt-get update
sudo apt-get install openjdk-8-jdk
切换到aosp根目录并执行:
source build/envsetup.sh
// 编译前删除build文件夹A
make clobber
执行lunch会显示所有编译格式,我们选择aosp_x86-eng
lunch aosp_x86-eng
或者
launch 5
开始编译
make -j12
这里可以直接执行make,-jx指的是编译使用的线程数,我就按照虚拟机设置直接拉满了
接下来就是漫长的等待,如果中途出现subcommand failed之类的错误,就重新执行上面的make指令,over
整编过后,查看aosp/out/host/linux-x86/framework/idegen.jar是否存在,如果不存在,进入源码根目录执行如下的命令:
source build/envsetup.sh
lunch [选择整编时选择的参数或者数字]
mmm development/tools/idegen/
编译成功后,会在 out/host/linux-x86/framework目录下生成idegen.jar,然后执行如下命令:
sudo development/tools/idegen/idegen.sh
这时会在源码根目录生成android.iml 和 android.ipr 两个文件,这两个文件一般是只读模式,这里建议改成可读可写,否则,在更改一些项目配置的时候可能会出现无法保存的情况。
sudo chmod 777 android.iml
sudo chmod 777 android.ipr
由于要将所有源码导入AS会导致第一次加载很慢,可以在android.iml中修改excludeFolder配置,将不需要看的源码排除掉。等源码项目加载完成后,还可以通过AS对Exclude的Module进行调整。如果你的电脑的性能很好,可以不用进行配置。
在android.iml中搜索excludeFolder,在下面加入这些配置。
<excludeFolder url="file://$MODULE_DIR$/bionic" /> <excludeFolder url="file://$MODULE_DIR$/bootable" /> <excludeFolder url="file://$MODULE_DIR$/build" /> <excludeFolder url="file://$MODULE_DIR$/cts" /> <excludeFolder url="file://$MODULE_DIR$/dalvik" /> <excludeFolder url="file://$MODULE_DIR$/developers" /> <excludeFolder url="file://$MODULE_DIR$/development" /> <excludeFolder url="file://$MODULE_DIR$/device" /> <excludeFolder url="file://$MODULE_DIR$/docs" /> <excludeFolder url="file://$MODULE_DIR$/external" /> <excludeFolder url="file://$MODULE_DIR$/hardware" /> <excludeFolder url="file://$MODULE_DIR$/kernel" /> <excludeFolder url="file://$MODULE_DIR$/out" /> <excludeFolder url="file://$MODULE_DIR$/pdk" /> <excludeFolder url="file://$MODULE_DIR$/platform_testing" /> <excludeFolder url="file://$MODULE_DIR$/prebuilts" /> <excludeFolder url="file://$MODULE_DIR$/sdk" /> <excludeFolder url="file://$MODULE_DIR$/system" /> <excludeFolder url="file://$MODULE_DIR$/test" /> <excludeFolder url="file://$MODULE_DIR$/toolchain" /> <excludeFolder url="file://$MODULE_DIR$/tools" /> <excludeFolder url="file://$MODULE_DIR$/.repo" />
走到这里有两个选择,一个是把源码拷贝到我们之前设置的共享文件夹里,这样就可以用外部的AS导入并查看,另一种是直接在Ubuntu上重新安装一个AS,我选的是后者,在Ubuntu软件这个应用中搜索下载即可,安装后选择打开已存在的android项目,选择aosp根目录下的android.ipr即可
参考链接
ubuntu20.04 开机引导后黑屏 光标闪现 无法进入图形桌面的解决方案
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。