配套系列教学视频链接:
Android 10.0 AOSP源码编译:https://edu.csdn.net/course/detail/35479
Android 10.0 根文件系统和编译系统:https://edu.csdn.net/course/detail/35480
说明
系统:AOSP Android10.0
设备:Android模拟器
前言
本章节重点介绍如何下载谷歌官方的AOSP源码。
一, 版本说明
谷歌发布新版本源码之后, 芯片原厂会根据自己的芯片特性进行适配,因为原厂适配Android系统更专业和稳定, 所以在实际开发中,我们都是从原厂或者方案公司那里获取到针对某个特定芯片的特定版本源码,当然了, 芯片原厂适配的周期也会长一些, 作为个人而言,如果想更早的获取到Android 源码, 并且想体现和了解最新版本源码和技术, 那么就可以直接自己去下载谷歌官方的源码。
Android版本说明:
Build | 标记 | 版本 | 支持的设备 | 安全补丁程序级别 |
RP1A.201105.002 | android-11.0.0_r17 | Android11 | Pixel 3、Pixel 3a、Pixel 3a XL、Pixel 3 XL、Pixel 4、Pixel 4a、Pixel 4 XL | 2020-11-05 |
RD1A.201105.003.C1 | android-11.0.0_r15 | Android11 | Pixel 4a (5G)、Pixel 5 | 2020-11-05 |
RD1A.201105.003.B1 | android-11.0.0_r14 | Android11 | Pixel 4a (5G)、Pixel 5 | 2020-11-05 |
RD1A.201105.003.A1 | android-11.0.0_r13 | Android11 | Pixel 4a (5G)、Pixel 5 | 2020-11-05 |
以上表格只摘取部分,详细的可以参考如下谷歌网站:
https://source.android.google.cn/setup/start/build-numbers?hl=zh-cn
Android O(8.0)之后的版本, 相比之前的版本,设计了新的系统框架, 名为Treble项目,将框架和厂商实现部分严格隔离出来,如HIDL和VNDK技术, selinux权限管控, 并新增加了很多功能技术, 如System-as-root,强制A/B设备, 动态分区,APEX模块化升级等。
二, repo工具下载和安装
Android源码中集中了非常多的git子仓库, 为了方便有效的管理多git仓库, 谷歌利用repo对所有git仓库进行管理,并且让用户通过repo工具批量下载Android源码, 所以我们下载Android源码之前必须先安装repo工具, 同时需要注意的是, 因为国内网络的问题, 无法直接访问谷歌安卓源码服务器, 所以国内都是通过清华大学开源软件镜像站或者中科大AOSP镜像网站下载,个人强烈推荐中科大, 速度快,也比较稳定。直接在百度搜索AOSP中科大即可, 链接如下:
https://lug.ustc.edu.cn/wiki/mirrors/help/aosp/ (中科大)
Android源码下载官方指引:
https://source.android.google.cn/setup/build/downloading?hl=zh-cn
下载repo 方法:
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
## 如果上述 URL 不可访问,可以用下面的:
## curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo
三, 源码下载
选定android-10.0.0_r45版本进行下载
##指定repo仓库服务器
export REPO_URL='https://mirrors.ustc.edu.cn/aosp/git-repo.git/'
##下载repo仓库,并指定android版本
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-10.0.0_r45
##下载android源码, 建议用低于4个线程下载
repo sync -j2
四, 出错处理
下载的过程中如果出错或者警告,可参考如下方法进行解决:
repo版本过低问题:
这是因为repo版本过低, 按照提示更新一下即可:
cp /mnt/extend_disk/android_src/android9.0/.repo/repo/repo /mnt/extend_disk/bin/repo
python版本过低问题:
下载源码需要python3.6, Ubuntu16.04安装python3.6需做如下操作:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6
五, 内核源码下载(可选)
如果大家对下载android内核源码也敢兴趣, 可自行根据以下方法进行下载
git clone git://mirrors.ustc.edu.cn/aosp/kernel/goldfish.git
六, repo工作原理介绍
歌其实是建立了一个manifests仓库来维护Android源码, 而mainfests仓库保存这一个default.xml文件, 该文件就记录了Android源码中的各个子仓库的地址, 以及下载到本地哪个地方, 然后repo是用python编写的一个脚本, repo脚本就会根据default.xml中配置进行批量下载:
manifest的仓库地址如下所示, 也可以单独下载:
git clone git://mirrors.ustc.edu.cn/aosp/platform/manifest
.repo/manifests/default.xml 部分内容语法介绍:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<!—remote标签指定远程仓库名字,
fetch是所有git url真正路径的前缀,所有git的project name加上这个前缀,就是git url的真正路径
-->
<remote name="aosp"
fetch="."
/>
<!—default标签设定所有projects的默认属性值,如果在project元素里没有指定一个属性,
则使用default元素的属性值 -->
<default revision="master"
remote="aosp"
sync-j="4" />
<!—project标签
name :git 的名称,用于生成git url。URL格式是:${remote fetch}/${project name}.git 其中的 fetch就是上面提到的remote 中的fetch元素,
name 就是此处的name
path :clone到本地的git的工作目录,如果没有配置的话,跟name一样
remote :定义remote name,如果没有定义的话就用default中定义的remote name
revision :指定需要获取的git提交点,可以定义成固定的branch,或者是明确的commit 哈希值
groups :列出project所属的组,以空格或者逗号分隔多个组名。所有的project都自动属于"all"组。每一个project自动属于-->
<project path="build/make" name="platform/build" groups="pdk" >
<copyfile src="core/root.mk" dest="Makefile" />
<linkfile src="CleanSpec.mk" dest="build/CleanSpec.mk" />
<linkfile src="buildspec.mk.default" dest="build/buildspec.mk.default" />
<linkfile src="core" dest="build/core" />
<linkfile src="envsetup.sh" dest="build/envsetup.sh" />
<linkfile src="target" dest="build/target" />
<!-- src表示在build/make/tools目录, dest表示本地路径build/tools软件链接文件链接到src-->
<linkfile src="tools" dest="build/tools" />
</project>
<project path="build/blueprint" name="platform/build/blueprint" groups="pdk,tradefed" />
<project path="build/kati" name="platform/build/kati" groups="pdk,tradefed" />
<project path="build/soong" name="platform/build/soong" groups="pdk,tradefed" >
</manifest>
总结
Android源码下载尽量使用中科大的镜像, 下载需要时间比较长, 耐心等待即可。