如何使用repo 下载Android 系统源码

阅读android源码,除了使用源码网站 Android Code search

之外,还可以将源码下载到本地方便搜索查看,下面讲一讲下载步骤。

主要步骤

首先需要下载repo工具。reop是以Git为基础构建的代码库管理工具,repo不是要取代git,而是为了在android环境中更轻松的使用git。

下载repo完成后,使用repo init来初始化文件夹,确定要下载的代码分支等信息。最后使用repo sync命令同步代码。

1. 下载repo

执行一下命令,下载repo工具,并确保它可执行

curl storage.googleapis.com/git-repo-do... > ~/bin/repo

chmod a+x ~/bin/repo

下载的这个repo实际是一段可执行的 Python 脚本,可以将其放在路径中的任何位置。使用文本文件打开repo可以看到里面的脚本。

2. 初始化repo客户端

这一步主要是做一些必要的初始化,确定要下载的源代码分支。

创建源码文件夹

下载的源码放在哪里?需要一个文件夹。

创建一个准备存放系统源码的文件夹

mkdir androidsyscode

cd androidsyscode

配置git

使用真实姓名和电子邮件地址配置 Git。要使用 Gerrit 代码审核工具,需要一个与已注册的 Google 帐号关联的电子邮件地址。确保这是可以接收邮件的有效地址。在此处提供的姓名将显示在提交的代码的提供方信息中。

git config --global user.name "Your Name"

git config --global user.email "you@example.com"

执行repo init

进入创好的文件夹中(如上面的androidsyscode)

这个步骤目的做一些初始化工作,并确定要下载的源码的分支。

init 后面需要指定一个清单网址,这个网址用于指定 Android 源代码中包含的各个代码库将位于工作目录中的什么位置

执行命令

repo init -u android.googlesource.com/platform/ma...

表示要拉取的是master分支代码。

如果要其他分支的代码要在后面加上-b和分支名称,如:

repo init -u android.googlesource.com/platform/ma... -b android-4.0.1_r1

其中-u 代表:指定一个url,从这个url中获取清单代码库。即这个清单代码库中包含了要下载的代码的各种信息。

-b:指定修订版本,即要下载的是后面参数指定的分支库(如android-4.0.1_r1)

这个分支名称android-4.0.1_r1从哪里来?怎么知道要下载是分支名称。事实上通过直接打开 android.googlesource.com/platform/ma... 网址就能找到,打开后可以看到里面有很多分支

在这里可以找到你想下载的分支名称。

事实上这个android.googlesource.com/platform/ma... 是个git库。你可以通过:

git clone android.googlesource.com/platform/ma...

将它下载到本地,然后通过git branch -r 等git命令操作可以看都有很多远程分支,这些分支就是你需要的分支名称。和网页打开看到的一样。

在这个manifest库中,你能找到所有android管理的库,分支等信息。

初始化成功后,工作目录中现在应包含一个 .repo 目录,清单等文件将保存在该目录下。

3. 下载源码 repo sync

执行完成repo init后就可以使用repo sync下载源码了。

这条命名目的是下载需要的代码到本地。

执行以下命令,开始下载:

repo sync

如果在未使用任何参数的情况下运行 repo sync,则该命令会同步所有项目的文件。

运行 repo sync 后,将出现以下情况:

1)如果目标项目从未同步过,则 repo sync 相当于 git clone。远程代码库中的所有分支都会复制到本地项目目录中。

2)如果目标项目以前同步过,则 repo sync 相当于:

git remote update

git rebase origin/branch

其中 branch 是本地项目目录中当前已检出的分支。如果本地分支没有在跟踪远程代码库中的分支,则项目不会发生任何同步。

通过repo help sync 命令可以了解sync的详细说明,其中有一些重要选项:

-c:仅获取服务器中的当前清单分支

-f:即使某个项目同步失败,也继续同步其他项目

-jthreadcount:将同步操作拆分成多个线程,以更快地完成。确保不会使计算机超负荷运行为其他任务预留一些 CPU。如需查看可用 CPU 的数量,请先运行:nproc --all

例:-j4 表示拆分成4个线程。

repo sync后面还可以跟可选参数[project-list]

repo sync [project-list]

这个[project-list]表示你想同步的项目列表。默认不填写是所有项目。命名加上这个项目名称,可以加快下载速度,你不需要的项目不会下载

project-list到底写的是什么?可以参考源码工作目录(即你执行repo init的目录)

下面 .repo/project.list 文件。打开这文件里面列举的是所有的项目名称。

这些项目名称代表什么,可以查看 .repo/manifests文件夹下的default.xml文件,这个文件描述了项目路径等信息。

运行repo sync此命令时,时间较久,需要耐心等待,成功完成后即可在本地查看系统源码。

4. mac 系统下载处理

由于Mac的文件系统默认不区分大小写,所以我们需要建一个磁盘映象。这个磁盘映像的目的是将android系统源码下载到这个磁盘映像中。防止因为文件大小写的问题出现错误。所以在mac系统中我们需要在磁盘映像中建工作目录然后再执行repo init命令。

在系统中找到磁盘工具

打开文件菜单选择空白映像

填写磁盘信息

输入磁盘名称,大小和格式。格式要选对,要区分大小写。然后保存即可。

创建好磁盘映像后,即可进入其中,执行repo init命令,以及repo sync命令来下载源码了。

下载的源码会保存在这个磁盘映像中,下次重启电脑还需要重新挂载,否则进不了源码目录。

下面看看如何挂载

挂载磁盘

挂载磁盘可以使用命令:

hdiutil attach ~/AndroidDisk.dmg -mountpoint /Volumes/android

即把刚才生成的映像文件,如AndroidDisk.dmg挂载到目录/Volumes/android

Google的官网上推荐把这行加到~/.bash_profile里,这样以后每次用mountAndroid命令就行了。

mount the android file image function mountAndroid { hdiutil attach ~/AndroidDisk.dmg -mountpoint /Volumes/android; }

(记住路径和文件名的正确书写)

以后每次在命令行输入:mountAndroid 就挂载了之前生成的映像了

5. repo 说明

repo 详细说明可以参考官方文档:

Repo 命令参考资料

如果对某个repo 命令不了解,可以执行命令:

repo help command

如,repo help sync

这个help命令输出对应命令的详细说明

6. 遇到的坑

执行repo 时遇到了一个错误:

env: python: No such file or directory

检查系统确实安装了python,但是安装的python3。于是打开repo文件,发现头部显示的是

#!/usr/bin/env python

将其改为

#!/usr/bin/env python3

并保存,问题解决。

repo命令实际上就是个python脚本文件,所以可以使用任何文本工具打开修改。。

参考:

source.android.com/source/down...

source.android.com/docs/setup/...

www.jianshu.com/p/b8da94ad1...

相关推荐
代码敲上天.13 分钟前
数据库语句优化
android·数据库·adb
GEEKVIP3 小时前
手机使用技巧:8 个 Android 锁屏移除工具 [解锁 Android]
android·macos·ios·智能手机·电脑·手机·iphone
model20054 小时前
android + tflite 分类APP开发-2
android·分类·tflite
彭于晏6894 小时前
Android广播
android·java·开发语言
与衫5 小时前
掌握嵌套子查询:复杂 SQL 中 * 列的准确表列关系
android·javascript·sql
500了12 小时前
Kotlin基本知识
android·开发语言·kotlin
人工智能的苟富贵13 小时前
Android Debug Bridge(ADB)完全指南
android·adb
小雨cc5566ru17 小时前
uniapp+Android面向网络学习的时间管理工具软件 微信小程序
android·微信小程序·uni-app
bianshaopeng19 小时前
android 原生加载pdf
android·pdf
hhzz19 小时前
Linux Shell编程快速入门以及案例(Linux一键批量启动、停止、重启Jar包Shell脚本)
android·linux·jar