当前位置: 首页 > news >正文

Android 内核开发之—— repo 使用教程

前言

repo 是一个用于管理多个 Git 仓库的工具,特别适用于管理大型项目如 Android 的源码。它是由 Google 开发的,用于解决多个 Git 仓库的同步、管理和代码审查等问题。因此,做 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 脚本下载方法如下(clone 命令两者选一):

$ 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

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-13.0.0_r3
$ repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest -b android-13.0.0_r3

然后使用 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/ s r c 地址的文件拷贝到 . / src地址的文件拷贝到./ src地址的文件拷贝到./dest
    其实,如果不使用 repo 工具,也是可以对照 manifest.xml 文件清单直接使用“git clone”的方式一个 project 一个 project 的下载的,然后对每个 project 进行 git checkout 特定的分支。

6 常用 repo 命令

常用命令如下:

  1. 初始化 repo 仓库
repo init
  1. 下载最新源码
repo sync
  1. 创建分支
repo start
  1. 换分支
repo checkout
  1. 查看分支
repo branches
  1. 查看文件状态
repo status
  1. 查看修改
repo diff
  1. 查看仓库信息
repo info

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 电线覆盖物检测数据集 气球风筝鸟巢 1300张 voc yol
  • 【Windows】快速帮你解决如何找到 Windows 上的 .condarc 文件
  • set的相关函数(3)
  • 关于加强银行业保险业移动互联网应用程序管理的通知
  • python爬虫初体验(一)
  • 网络编程问题解答
  • C++教程(五):C++高手养成之代码规范,如何写出规范优雅的程序
  • C# Action和delegate区别及示例代码
  • tb的数数问题(牛客小白月赛)
  • Vue3新组件transition(动画过渡)
  • ubuntu18.04升级到20.04
  • 【JavaScript】LeetCode:41-45
  • Python 低层多线程接口_thread的用法
  • Unity UGUI的核心渲染组件
  • Linux 内存管理机制概述
  • Cumulo 的 ClojureScript 模块已经成型
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • ESLint简单操作
  • RxJS: 简单入门
  • Sass 快速入门教程
  • 包装类对象
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 关于使用markdown的方法(引自CSDN教程)
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 前端工程化(Gulp、Webpack)-webpack
  • 前嗅ForeSpider教程:创建模板
  • 数据仓库的几种建模方法
  • 微信支付JSAPI,实测!终极方案
  • 我是如何设计 Upload 上传组件的
  • 新手搭建网站的主要流程
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • HanLP分词命名实体提取详解
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​插件化DPI在商用WIFI中的价值
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (多级缓存)缓存同步
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (数据结构)顺序表的定义
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • .net refrector
  • .NET 使用 XPath 来读写 XML 文件
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET程序员迈向卓越的必由之路
  • .NET大文件上传知识整理
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [ C++ ] STL---string类的模拟实现
  • [20170713] 无法访问SQL Server
  • [4]CUDA中的向量计算与并行通信模式
  • [Angular] 笔记 18:Angular Router