Android内核开发:理解和掌握repo工具
由于Android源码是用repo工具来管理的,因此,搞Android内核开发,首先要搞清楚repo是什么东西,它该怎么使用?作为《Android内核开发》系列文章的第二篇,我们首先谈谈对repo工具的理解和使用。
1. repo是什么?
repo是一种代码版本管理工具,它是由一系列的Python脚本组成,封装了一系列的Git命令,用来统一管理多个Git仓库。
2. 为什么要用repo?
因为Android源码引用了很多开源项目,每一个子项目都是一个Git仓库,每个Git仓库都有很多分支版本,为了方便统一管理各个子项目的Git仓库,需要一个上层工具批量进行处理,因此repo诞生。
repo也会建立一个Git仓库,用来记录当前Android版本下各个子项目的Git仓库分别处于哪一个分支,这个仓库通常叫做:manifest仓库。
3. 怎么安装repo?
官方的repo脚本下载方法:
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ./repo
由于官网被墙,目前可以使用的repo脚本下载方法如下(两者选一):
$ git clone git://git.omapzoom.org/git-repo.git $ git clone git://aosp.tuna.tsinghua.edu.cn/android/git-repo.git/ $ cp git-repo/repo ./repo
或者修改手头已有的被墙的repo文件:
REPO_URL = 'git://git.omapzoom.org/git-repo.git' REPO_URL = 'git://aosp.tuna.tsinghua.edu.cn/android/git-repo' REPO_REV = 'stable'
当然,你也可以去我的GitHub下载这个repo文件,地址:
https://github.com/Jhuster/AOSP/blob/master/repo
4. 怎么下载源码?
上面说过,Android源码分支其实由一个叫manifest仓库来管理起来的,因此,下载源码首先要clone这个manifest仓库。这个仓库里面有一个XML文件,其实就是一个文件清单,列出了本代码仓库依赖哪些代码,该去哪下载,分支是什么。
一般用repo init命令来clone这个manifest仓库,例如,如果要下载Android源码,则方法如下:
$ repo init -u https://android.googlesource.com/platform/manifest
当然,上面的官网被墙了,因此,推荐如下镜像(两者选一):
$ repo init -u git://git.omapzoom.org/platform/manifest.git $ repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest
初始化完毕后,你会在本地的.repo文件夹中看到manifest仓库的内容,这个文件夹中最重要的文件是manifest.xml(有的仓库用的是default.xml,然后指向具体的xml),它就是上面说到的文件清单。
如果要选择特定版本的Android源码,或者在已下载的源码基础上切换到其他版本,则可以使用-b选项:
$ repo init -u git://git.omapzoom.org/platform/manifest.git -b android-5.0.2_r1 $ repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest -b android-5.0.2_r1
然后使用 repo sync 命令进行同步即可下载好全部的Android源码了。
5. manifest.xml文件清单的组成
上面提到了repo init需要初始化一个manifest仓库,仓库中含有一个很重要的manifest.xml文件清单,其实这个manifest.xml并不复杂的,它就是用XML文件的格式记录了本项目依赖的各个Git仓库的名称、地址,以及分支等信息。常用的元素如下所示:
(1) manifest 最顶层的XML元素
(2) remote 设置远程git服务器的属性,如名称、根URL地址等
(3) project 需要clone的Git仓库,path表示本机路径,name表示远程版本库的相对路径
(4) copyfile 执行拷贝操作,把URL/$src地址的文件拷贝到./$dest
其实,如果不使用repo工具,也是可以对照manifest.xml文件清单直接使用“git clone”的方式一个project一个project的下载的,然后对每个project进行git checkout特定的分支。
7. 常用repo命令
这一块网上文章很多,我就不详细讲解了,只列出常用命令。
(1) repo init // 初始化repo仓库
(2) repo sync // 下载源码
(3) repo start // 创建分支
(4) repo checkout //切换分支
(5) repo branches //查看分支
(6) repo status //查看文件状态
8. 小结
关于repo工具就介绍到这里了,有任何疑问欢迎留言或者来信lujun.hust@gmail.com交流,也欢迎关注我的新浪微博 @卢_俊 获取最新的文章和资讯。
Android内核开发:理解和掌握repo工具相关推荐
- Android内核开发:为什么刷机后系统第一次启动会很慢?
转自:http://ticktick.blog.51cto.com/823160/1677216 在做Android内核开发的过程中,我们会发现,每次编译完系统源码,烧录到设备/手机中后,第一次启动都 ...
- Android内核开发:源码的版本与分支详解
我想很多初学者或许跟我一样,看完Android源码下载相关的文章以后,就开始兴致勃勃地去下载Android源码了,但是下载完了源码后,有没有像我一样产生如下几个困惑呢? (1) Android版本有哪 ...
- Android内核开发:系统编译输出的镜像文件
本文是<Android内核开发>的第四篇文章,主要介绍一下源码编译输出的几个重要的镜像文件,这里把bootloader源码和Linux内核源码的编译输出也算在其中,因为毕竟Android系 ...
- Android内核开发:从源码树中删除出厂的app应用
本文是<Android内核开发>系列的第十一篇文章,本文重点介绍如何从Android源码中删除出厂的app应用. 上一篇文章中提到过,系统出厂的app应用,其实就是被安装到/system分 ...
- Android内核开发:系统启动速度优化
在学习新知识的过程中,我一直很推荐结合实战任务去学习,只有经历实战,才能加深对理论知识的理解.<Android内核开发>系列已经写了八篇了,本文就结合前面的内容,给大家布置一个实战任务: ...
- Android内核开发:图解Android系统的启动过程
本文是<Android内核开发>系列的第六篇文章,前面的几篇文章介绍了Android内核开发相关的基础知识,包括:Android源码的下载.版本和分支介绍.编译和烧写等等,从本文起就要开始 ...
- Android内核开发:系统分区与镜像文件的烧写
本文是<Android内核开发>系列的第五篇文章,本文重点介绍如何把编译输出的镜像文件烧写到Android设备中. 玩过刷机的朋友肯定对fastboot这个工具并不陌生,它是Android ...
- Android内核开发:学会分析系统的启动log
本文是<Android内核开发>系列的第八篇文章,本文主要关注如何分析Android系统的启动log,学会通过搜索重要的TAG标签,找到Android启动过程中的重要节点. 要学会分析系统 ...
- Android快速开发不可或缺的11个工具类(下载)
Android快速开发不可或缺的11个工具类(下载) 源码简介 Android快速开发不可或缺的11个辅助类,其中10个来自张鸿洋的博客,1个是我平时积攒的,复制粘贴到你的项目里,添加上包名就可以直接 ...
最新文章
- Oracle不能在本地计算机启动,Windows 不能在本地计算机启动 OracleDBConsoleorcl的问题解决方法...
- java 内部类 引用_在Java中如何从内部引用匿名内部类?
- linux命令之crontab定时执行任务【转】
- FIFOQueue '_4_batch_processing/batch_join/fifo_queue' is closed and has insu
- 武汉网络推广浅析当网站停止收录时该检查哪些问题?
- linux -- chcp
- orika 映射非空字段_Orika:将JAXB对象映射到业务/域对象
- 关于阿拉伯数字转化成为大写汉字
- 三维点云网络PointNet——模型及代码分析
- 95-10-080-启动-replicaManager副本管理器
- 计算机组成原理课件ppt6,唐朔飞 计算机组成原理课件6.ppt
- Go语言学习笔记(8)——包和结构体
- Eclipse里做JBPM工作流gpd.xml中文乱码问题解决
- Excel 2010的新功能简介
- kali安装图像处理软件
- 啊哈C语言——让计算机多彩的开口说话
- u一点·料:阿里巴巴1688ued体验设计践行之路
- compile函数使用
- kmspico_setup.exe运行提示系统资源不足,无法完成请求的服务
- 公众号批量移动用户分组
热门文章
- 用户不在sudoers文件中的解决方法 .
- PCL Lesson6:Eigen基础
- Couldn't find executable named map_saver below /opt/ros/indigo/share/map_server
- C++ Licence认证用于项目开发和设备认证
- 计算机原理课 如何在中小学课堂中变成有趣,在课堂中如何发挥电教辅助教学优势...
- python立即关机_“python怎么控制计算机关机“python自动关机教程
- react antd 更改table 表头和表行样式
- html框架集frame是啥意思,HTML框架集frameset和内嵌框架iframe
- 疯狂python讲义pdf_重磅!Python再次第一,Java和C下降,凭什么?
- aix安装bff_##aix5.3升级到高版本后,安装低BFF文件的问题