对于Android系统这种超大型项目,一般都会将其拆分为很多个git仓库进行管理(多达几百个)。如果这个时候还单一使用Git管理将会非常耗时,因此现在管理Android系统项目用的是repo工具。repo是一种使用python语言构建的基于git的仓库管理工具,可以批量且有效的组织众多的git仓库。
1. 下载并配置repo工具(掌握)
#下载repo文件到本地的/bin目录,如果放到别的路径需要将路径添加到系统变量$PATH中
sun@ubuntu:~$ curl https://storage.googleapis.com/git-repo-downloads/repo > /bin/repo
#给repo添加可执行权限
sun@ubuntu:~$ chmod a+x /bin/repo
2. 下载Android源码步骤(掌握)
以AOSP(Android Open Source Project)的Android9为例
2.1 初始化repo
#这里使用国内的清华源镜像,速度较官网快
sun@ubuntu:~/projects/AOSP4$ repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-9.0.0_r9 --repo-url=https://aosp.tuna.tsinghua.edu.cn/git-repo
2.2 同步源码到本地
sun@ubuntu:~$ repo sync -c
...
...
正在检出文件: 100% (4084/4084), 完成.prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9正在检出文件: 0% (14/4084)
正在检出文件: 100% (10157/10157), 完成.
正在检出文件: 100% (1150/1150), 完成.
Checking out: 100% (668/668), done in 19m37.235s
repo sync has finished successfully.
3 下载源码过程解析(了解)
这部分有时间可以进行了解,内容较多。
3.1 repo init
3.1.1 常用选项
-u: 指定项目清单库的url地址
-m: 指定使用哪个项目清单文件
-b: 指定具体的分支,默认情况下指定master分支
–repo-url: 指定repo库的url地址
–config-name: 指定访问服务器的用户名和邮箱。这个选项后面不接内容,运行的时候会提示你输入用户名和邮箱
3.1.2 主要作用
repo init主要有两部分工作:下载两个git管理的仓库(repo库和manifest库)
repo库: 主要存放一些python脚本,配合之前说的repo脚本来共同管理众多源码仓库
manifest库: 项目清单库,用来管理各个版本的清单文件
完成后AOSP目录的会出现一个.repo的隐藏文件夹,文件夹结构如下:
sun@sun-pc:~/project/AOSP4/.repo$ ll
总用量 24
drwxrwxr-x 5 sun sun 4096 1月 18 15:23 ./
drwxrwxr-x 3 sun sun 4096 1月 18 15:22 ../
drwxrwxr-x 2 sun sun 4096 1月 18 15:23 manifests/
drwxrwxr-x 8 sun sun 4096 1月 18 15:23 manifests.git/
-rw-rw-r-- 1 sun sun 500 1月 18 15:23 manifest.xml
drwxrwxr-x 11 sun sun 4096 1月 18 15:23 repo/
3.1.3 解析repo init产生的内容
此时AOSP根目录下还没有代码,只有.repo目录中有所变化。
3.1.3.1 manifests
这个文件夹是由3.1.3.2所说的manifests.git进行维护的。文件夹中包含该分支(android-9.0.0_r9)的项目清单文件(AOSP目前每个分支下只维护default.xml这一个清单)
#-------------------------<< AOSP >>--------------------------------
#有多个分支
sun@sun-pc:~/project/AOSP/.repo/manifests$ git branch -avv
* default d69a58cdc [origin/android-9.0.0_r9] Manifest for Android 9.0.0 Release 9
remotes/origin/android-10.0.0_r1 151c2f061 Manifest for Android 10.0.0 release 1
remotes/origin/android-10.0.0_r10 e3bacc7b4 Manifest for Android 10.0.0 Release 10
...
#每个分支只有一个清单default.xml
sun@sun-pc:~/project/AOSP/.repo/manifests$ ls
default.xml GLOBAL-PREUPLOAD.cfg
#--------------------<< 实际开发中 >>---------------------------------
#通常一个代码服务器的清单库只有一个分支
sun@sun-pc:~/project/SIM8000/.repo/manifests$ git branch -avv
* default 0427dac [origin/master] SIM8000_PHONE.xml
remotes/m/master -> origin/master
remotes/origin/master 0427dac SIM8000_PHONE.xml
#一个分支下会有很多的清单文件
sun@sun-pc:~/project/SIM8000/.repo/manifests$ ls
SIM8000_PHONE.xml SIM8000_AUTOMOTIVE.xml SIM8000_TV.xml SIM8000_POS.xml
截取一部分default.xml的内容进行分析:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="aosp"
fetch=".."
review="https://android-review.googlesource.com/" />
<default revision="refs/tags/android-9.0.0_r9"
remote="aosp"
sync-j="4" />
<project path="build/make" name="platform/build" groups="pdk" >
<copyfile src="core/root.mk" dest="Makefile" />

本文详细介绍了如何使用repo工具下载和管理Android系统的源码,包括repo的下载配置、初始化、同步源码的步骤,并解析了repoinit和reposync过程中涉及的仓库管理、项目清单、同步内容等关键概念,帮助读者深入理解repo在大型项目中的应用。
最低0.47元/天 解锁文章
1691

被折叠的 条评论
为什么被折叠?



