Android源码仓库和Repo工具使用

前言

好久没有双休一个周末了,唉,闲话不多说了,不管任何时候都要多学习充实自己。ROM Porting的工作是很繁琐的,涉及的知识点很多,这里介绍一下ROM Porting经常听到的名词和Repo工具的使用。

AOSP、AOKP、CM

相信很多Android发烧友对这几个单词都是耳熟能详了,这里还是给新入门的朋友们普及一下这几个单词背后的含义。

AOSP是“Android Open-Source Project”的缩写,中文名称为Android开放源代码项目。大家都知道Android是开源操作系统,所以Google每发布一个Android版本,都会给开源社区发放对应版本的源代码,也就是我们所说的AOSP ROM,这可以称得上是最为纯净的Android系统。可以用类比来让大家更清楚一些,例如国内多数盗版的Windows系统,几乎都是基于微软的MSDN制作,AOSP ROM即等相当于微软MSDN母盘的角色。

AOKP是“Android Open-Source Kang Project”,比AOSP多了一个“Kang”。在Android社区中,Kang表示这是一个被别人定制过的ROM,是一个来自民间的ROM。

CM是CyanogenMod的简称,Cyanogen团队是全球最大的第三方ROM编译团队,覆盖机型范围特别广,国内知名的ROM例如MIUI、锤子ROM都是基于CM实现的。严格意义上来说,CM ROM属于AOKP的范畴。CM ROM虽然一直遵从原生Android,但只有Google官方的才算真正的AOSP。

为什么使用Repo

上文介绍的AOSP是由许许多多有Git管理的项目组成的,例如,在Android4.2中,就包含了329个项目,每一个项目都是一个独立的Git仓库。这意味着,如果我们要创建一个AOSP分支来做新的feature开发,那么就需要到每一个子项目去创建对应的分支。这显然不能手动地到每一个子项目里面去创建分支,必须要采用一种自动化的方式来处理。这些自动化处理工作就是由Repo工具来完成的。当然,Repo工具所负责的自动化工作不只是创建分支那么简单,查看分支状态、提交代码、更新代码等基础的Git操作都可以用Repo来替代完成。

Reopo

Repo工具是由一系列的Python脚本组成的,这些Python脚本通过调用Git命令来完成自己的功能。比较有意思的是,组成Repo工具的那些Python脚本本身也是一个Git仓库,这个Git仓库在AOSP里面就称为Repo仓库,我们每次执行Repo命令的时候,Repo仓库都会对自己进行一次更新。

上面我们讨论的是Repo仓库,但是实际上我们执行Repo命令想操作的是AOSP。这就要求Repo命令要知道AOSP都包含有哪些子项目,并且要知道这些子项目的名称、仓库地址是什么。换句话说,就是Repo命令要知道AOSP所有子项目的Git仓库元信息。因为AOSP也是不断地进行迭代的,每一个版本所包含的子项目可能都是不一样的。这意味着需要通过另外一个Git仓库来管理AOSP所有的子项目的Git仓库元信息。这个Git仓库在AOSP里面就称为Manifest仓库。

到目前为止,我们提到了三种类型的Git仓库,分别是Repo仓库,Manifest仓库和AOSP子项目仓库。Repo仓库通过Manifest仓库可以获得所有AOSP子项目仓库的元信息。有了这些元信息之后,我们就可以通过Repo仓库里面的Python脚本来操作AOSP的子项目。那么,Repo仓库和Manifest仓库又是怎么来的呢?答案是通过一个独立的Repo脚本来获取,这个Repo脚本位于AOSP的一个官方网站上,我们可以通过HTTP协议来下载。

现在,我们就通过一个图来勾勒一下整个AOSP的Picture,它由Repo脚本、Repo仓库、Manifest仓库和AOSP子项目仓库组成,如图1所示:

Repo脚本

我们可以直接通过curl命令,通过http协议,获取最新的Repo脚本:

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

Repo命令

repo init -u <url> [OPTIONS]

在当前目录下初始化repo,会在当前目录下生成一个.repo目录,就像Git Project目录的.git一样。

-u:指定一个URL,从这个URL中取得repository的manifest文件。获取的manifest文件放在.repo目录中,命名为manifest.xml,这个文件的内容其实就是所有被git管理的仓库列表。

[OPTIONS] -m:选择获取repository中的某一个特定的manifest文件,如果不具体指定,那么表示为默认的manifest文件(default.xml)。

[OPTIONS] -b:指定某个manifest分支。如果不指定-b参数,那么默认会使用master分支。

repo sync [project-list]

同步代码,下载最新的本地工作文件,更新成功,则本地文件和repository中的代码是一致的。可以指定需要更新的project,如果不指定任何参数,会同步Manifest文件中的所有git项目。

如果是第一次运行repo sync,则这个命令相当于git clone,会把repository中的所有内容都拷贝到本地。如果不是第一次运行repo sync,则相当于运行git remote update && git rebase original/branch

repo update [project-list]

上传修改的代码,如果你本地的代码有所修改,那么运行repo sync的时候,会提示你上传修改的代码,所有修改的代码分支会上传到Gerrit(基于web的代码review系统)。Gerrit接收上传的代码,会转换为一个个变更,从而可以让其它人来对比并且review修改提交的代码。

repo diff [project-list]

显示当前Project修改的代码和当前工作代码之间的差异。

repo start new_branch_name [specified-project]

在指定的Project上创建一个新的分支。

repo branch

查看所有分支

repo abandon <branch>

删除指定分支,无论是否merged。

repo forall [project-list] -c COMMAND

对指定的Project列表或者所有Project执行COMMAND命令。

repo status

显示Repo仓库中每个Project的状态。

repo download target revision

下载特定的修改版本到本地。

我的理解

由于AOSP项目由很多Git仓库构成,如果一个一个的git clone太过于浪费时间,因此需要使用Repo工具将Git仓库集合一口气下载到本地来。一旦Project下载到本地后,针对单个Project,均可以直接用Git命令去操作。因为我对Git命令更熟悉一些,所以我根本不需要去死记硬背Repo除了Repo init外的其他命令,直接使用对应的Git命令即可。

时间: 2024-10-13 02:14:11

Android源码仓库和Repo工具使用的相关文章

获取android源码时repo的错误

今天用repo获取android源码:../bin/repo init -u git://android.git.kernel.org/platform/manifest.git出现问题:问题一:Traceback (most recent call last):File "./repo", line 590, in <module>    main(sys.argv[1:])File "./repo", line 557, in main    _In

在Mac OS X中下载Android源码的一些经验

首先说明,随着近期(2014年6月开始)GFW的升级,这个网站:http://www.android.com/ 已经不能正常访问了,下面的这些操作均是在我连接VPN的时候进行的. 首先,需要做一些准备工作:据这里(http://source.android.com/source/initializing.html)介绍,Mac OS中文件系统的特点是:case-preserving but case-insensitive,也就是保留大小写,但对大小写不敏感,这样会给后续运行一些命令带来很多麻烦

Android整机源码如何轻松下载?清华大学Android源码镜像

今天发现,清华大学提供AOSP镜像,以前都是从Google的站点下载同步更新的,但是现在有了国内的镜像站点就好多了 帮助:https://wiki.tuna.tsinghua.edu.cn/MirrorUsage/android 仓库地址: git://aosp.tuna.tsinghua.edu.cn/android/ 使用浏览器访问: http://aosp.tuna.tsinghua.edu.cn/android/ 一.下载android 源码 1.下载 repo git://aosp.t

repo下载国内链接android源码

刚好碰到要下载一个指定版本的android源码,在网上没有找到,所以只能自己去下载,看了谷歌官方下载帮助但是苦于墙抽风,下载速度也奇慢,所以找了几个国内的源头下载,那么跟着我动起来,在这之前你需要一台装有linux的电脑或者是虚拟机上装有linux也是可以的. (一).科普一下git与repo的区别 1. Git:Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. 2. Repo: Repo是谷歌用Python脚本写的调用git的一个脚本.主要是用来下载.管

Android 源码分析工具

标 题: [原创]Android源码分析工具及方法作 者: MindMac时 间: 2014-01-02,09:32:35链 接: http://bbs.pediy.com/showthread.php?t=183278 在对 Android 源码进行分析时,如果有得力的工具辅助,会达到事半功倍的效果.本文介绍了一些在分析 Android 源码时使用的一些工具和方法,希望能够帮助到有需要的同学. Eclipse 在 Android 应用程序开发过程中,一般会使用 Eclipse,当然 Googl

安装repo,下载Android源码遇到问题

首先是repo的安装,参考网上的帖子都过时了,原因是下载服务器地址变动了.最好参考谷歌官方地址:http://source.android.com/source/downloading.html.下载好repo要配置环境变量. 我下载源码还是失败,原因你懂得...天朝GFW.... 顺便提醒一下Ubuntu配置环境变量的两个方法. 一.临时性添加 ~$ echo $PATH       # 显示当前环境变量 /usr/local/sbin:/usr/local/bin     # 显示举例,多个

Eclipse与Android源码中ProGuard工具的使用

由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的理解和认识简要的做个笔记,有异议或者不解的,可以直接留言. 什么是ProGuard工具? ProGuard是android提供的一个免费的工具,它能够移除工程中一些没用的代码,或者使用语义上隐晦的名称来重命名代码中的类.字段和函数等,达到压缩.优化和混淆代码的功能.具体来说,使用ProGuard工具

(国内)完美下载Android源码Ubuntu版

今天写的文章莫名奇妙的没了,所以再重新写一篇. 首先,为了方便起见,我已经将系统更换成里Ubuntu,因为官方推荐使用这个Linux发行版(唉,csdn给我丢文章了,没动力写东西了.)先来一张系统的截图: Ubuntu的版本是15.04(推荐用这个版本).接下来是我们可能用到的软件. git :使用repo工具的时候会用到git,git并没有在Ubuntu中预装,所以需要事先安装git,使用命令: sudo apt-get install git 安装完成之后,需要对git进行配置,设置git的

第2章 Android源码下载及编译

在分析Android源码前,首先要学会如何下载和编译系统.本章将向读者完整的呈现Android的源码的下载流程.常见问题以及处理方法,并从开发者的角度来理解如何正确地编译出Android系统(包括原生态系统和定制设备).后面,我们将在此基础上深入到编译脚本的分析中.以"庖丁解牛"的精神来还原一个庞大而严谨的Android编译系统. 2.1 Android源码下载指南 2.1.1 基于Repo和git的版本管理 Git是一种分布式的版本管理系统,最初被设计用于linux内核的版本控制.本