AOSP下载编译与导入

本文详细介绍了如何在Windows上的Ubuntu虚拟机中搭建AOSP开发环境,包括下载Ubuntu镜像、安装虚拟机、配置环境、下载AOSP源码、编译源码以及在Android Studio中导入源码的过程。涉及到的关键步骤包括设置软件包、下载repo、初始化仓库、编译选项以及解决可能出现的问题。
摘要由CSDN通过智能技术生成

本文大部分内容均来源于皇叔的博客,我在此基础上做了汇总并添加了一些自己遇到的问题及解决方案

1.什么是AOSP?

AOSP(Android Open Source Project)是Google主导的Android开源系统项目,我们所知的Android原生系统及国内厂商定制的ROM诸如MIUI,ColorOs等均是在此基础上开发的,中文网站是https://source.android.google.cn/。

2.为什么要学习AOSP

AOSP可以说是整个现在市面上所有Android系统的起点,研究其源码可以更好地了解app到系统的底层工作原理,诸如系统启动流程,AMS,WMS,Binder等等,知其然,知其所以然,对我们不管是开发应用层还是framework层都有帮助。

3.安装虚拟机

曾经AOSP是支持在MacOS及Linux上进行下载与编译的,但是对MacOs的支持已经于2021年6月22日终止,我自己也是因为之前在Mac上下载编译了8.0的源码,但是因为空间不足删掉了,所以重新在Windows上进行下载编译。

下载Ubuntu镜像

Google会定期在 Ubuntu LTS (14.04) 和 Debian 测试版本中对 Android 构建系统进行内部测试,同时Android2.3以上需要使用64位环境,所以我们最好选择14.04以上版本,这里我选择的是18.04,之所以没有选择最新的20.04是因为在构建过程中遇到了一些莫名其妙的问题,后面会讲。

创建虚拟机

因为我是在win上操作的,所以想使用Ubuntu就要利用虚拟机来安装,这里虚拟机我使用的是Oracle VM VirtualBox ,版本6.1.18

  1. 一路下一步安装成功后,点击上方的新建按钮,在新建虚拟电脑窗口中,名称和虚拟盘位置自己定义,类型选择Linux,版本选择Ubuntu(64-bit),如果选项中没有64位系统,可以查看https://blog.csdn.net/tai532439904/article/details/
  2. 分配内存大小,建议起码系统内存的一半,比如我是32g,选择分配16g
  3. 一路下一步,到创建虚拟硬盘,这里我建议300g,不用担心虚拟机会直接占用你300g的存储空间,因为上一步选择的是动态分配,也就是说使用多少分配多少,作为参考我下载编译的Android 12源码是234g。点击创建。

安装Ubuntu

  1. 选择已经创建好的虚拟机,点击启动,这时弹出的窗口会让我们选择启动镜像,我们选择已经下载的Ubuntu镜像本地文件地址
  2. 选择安装Ubuntu,一路下一步,选择地区点中国地图,用户名密码,选择自动登录,接下来系统就会开始下载文件了,这里遇到一些非必须软件,如语言包等,建议耐着性子等它下完,完事儿重启。
  3. 在设置–>系统–>处理器选项里,设置能设置的最大值,我的cpu是24线程,这里设置为12,后面编译会用到,初始是1,设置低的话编译时间太长。

ps. 进入了系统主页面,但是界面非常小看不清楚,拉大窗口也无法自动适配,我们右键更换背景进入设置页,在设置页中选择设备,将分辨率调高,我这里是1929*1200;接着在设置中找到电源,将节电改为从不,因为在后续下载编译过程比较漫长,这时系统黑屏再重新进入有几率会卡死,尤其是配置不高的电脑。

psps. 如果选择升级到20.4,然后启动黑屏,可以参考此解决方法

安装增强工具

安装增强工具可以方便我们在本机和虚拟机之间双向复制粘贴,以及共享文件

  1. 首先在终端安装:
sudo apt-get install gcc perl make
  1. 点击顶部tab中的设备(没有设备或者顶部没有tab的可以到virtualbox管理器里的虚拟机设置里找到用户界面,勾选在屏幕顶部显示,同时全选或选中设备项),将共享粘贴板与拖放改为双向,选择共享文件夹,新建,设置一个共享文件夹的路径,勾选自动挂载与固定分配,点击完成
  2. 再次选择设备,选择安装增强功能,这时虚拟机系统界面会出现一个盘符,名字大概叫Vbox_Gas_xxxx,同时会自动弹窗是否运行,点击运行。
  3. 如果自动弹窗就到文件里,选择盘符,会有一个运行软件按钮,如果点击盘符提示Unable to mount Vbox之类的字样,说明文件无法被识别,这时我们打开终端,输入
sudo apt-get install --reinstall linux-image-$(uname -r) 

完成后重复刚才操作即可,重启虚拟机,欧克

4.下载AOSP及内核源码

设置所需的软件包

按照官方文档,执行安装对应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

不使用镜像下载的话速度太慢,原因懂得,而国内比较知名的两个镜像站,清华大学镜像站中科大镜像站,以下我们使用清华大学的镜像

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

5.AndroidStudio导入源码

整编过后,查看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即可

参考链接

刘望舒AOSP基础

Google官方AOSP文档

ubuntu20.04 开机引导后黑屏 光标闪现 无法进入图形桌面的解决方案

解决 VirtualBox 中 Ubuntu 下无法安装增强功能异常

模拟器启动错误

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值