repo
1.1、repo简介
是什么 ?:a command line tool built on top of git which helps manage many git repositories, does the uploads to revision control systems, and automates parts of the development workflow. Repo is not meant to replace Git, only to make it easier to work with Git.
开发语言:Python
官方主页:https://android.googlesource.com/tools/repo
源码仓库:
used by:AOSP
1.2、通过包管理器安装repo
操作系统包管理器安装命令
Windowsscoopscoop install repo
WindowsChocolateychoco install -y repo
macOSHomeBrewbrew install repo
GNU/LinuxLinuxBrewbrew install repo
aptsudo apt-get install -y repo
CentOSyumsudo yum install -y repo
dnfsudo dnf install -y repo
openSUSEzyppersudo zypper install -y repo
Alpine Linuxapksudo apk add repo

Arch Linux

ArcoLinux

Manjaro Linux

pacmansudo pacman -Syyu --noconfirm
sudo pacman -S    --noconfirm repo
Gentoo LinuxPortagesudo emerge repo
1.3、通用方式安装repo

step1、安装依赖

所有时Terminal + Shell + GNU CoreUtils
下载时cURL
运行时gitCPython

step2、使用curl命令下载repo脚本

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > /usr/local/bin/repo

step3、给repo脚本设置执行权限

chmod a+x /usr/local/bin/repo

step4、将repo脚本所在目录加入PATH环境变量中

export PATH=$PATH:/usr/local/bin

step5、设置REPO_URL环境变量的值

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

这么做的原因:repo脚本在运行过程中会尝试更新自己,更新地址优先使用REPO_URL环境变量的值,如果没有此值,会从https://gerrit.googlesource.com/git-repo更新。

1.4、配置git

在使用repo命令的过程中,可能会提示:请您输入邮箱号用户名。这是git提示我们的,我们事先设置好,示例:

git config --global user.email leleliu008@gmail.com
git config --global user.name  leleliu008
1.5、repo命令 

repo命令的使用格式:

repo help <COMMAND>
repo init [ARGUMENT]...
repo sync [ARGUMENT]...
1.5.1、repo help <COMMAND>

查看COMMAND的使用帮助。

示例:

repo help init
1.5.2、repo init [ARGUMENT]...

该命令的作用是下载源码的清单文件manifest.xml)。

1.5.2.1、-u <URL>

uurl的首字母。该参数用于指定清单文件manifest.xml)的下载地址,常用的URL有:

类型URL
https://android.googlesource.com/platform/manifest
清华大学开源镜像站的镜像https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
中国科学技术大学开源镜像站的镜像git://mirrors.ustc.edu.cn/aosp/platform/manifest

示例:

mkdir -p ~/AOSP/master
cd ~/AOSP/master
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
1.5.2.2、-b <BRANCH>

bbranch的首字母。此参数用于指定清单文件manifest.xml)的分支,关于分支名称,可以查看

注意:如果没有指定-b参数,那么默认会使用master分支。

示例:

mkdir -p ~/AOSP/android-6.0.1_r78
cd ~/AOSP/android-6.0.1_r78
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-6.0.1_r78

清单文件manifest.xml)下载的很快,这一步大概有几分钟就完成了。

repo init执行成功后,会在~/AOSP目录中生成一个.repo的目录,此目录为隐藏属性的文件, 我们可以在终端中使用ls -a命令查看此目录,此目录中保存了将要下载的源代码的相关信息。

~/AOSP/.repo/manifest.xml文件就是清单文件。其他都是一些配置文件。

1.5.2.3、-q

qquite的首字母。此参数表示没有任何的日志输出。

1.5.3、repo sync

repo sync命令是根据${SOURCE_DIR}/.repo/manifest.xml清单文件同步指定的代码到本地。

repo sync命令运行的过程中,如果出现中断,只要重新执行repo sync就可以了。

第一次运行repo sync,则这个命令相当于git clone,会把repository中的所有内容都拷贝到本地。

第二次运行repo sync,则相当于git remote update; git rebase origin/branch

repo sync命令会更新.repo下面的文件。如果在merge的过程中出现冲突,这需要手动运行git rebase –continue

repo sync命令还可以重新校对下载的源码,若是有问题或遗漏了一些文件会重新下载,并从.repo目录中导出到实际源码中。

若是出现以下信息,表示同步完成。

repo sync has finished successfully.
1.6、repo命令综合使用示例
1.6.1、需求

下载android-11.0.0_r30的源代码并编译它

1.6.2、检查磁盘是否支持大小写敏感

macOS用户一定要注意这一步

GNU/Linux用户忽略这一步即可。

存放AOSP源码的文件系统必须是大小写敏感的,如果您使用的是macOS系统,很可能您现在使用的文件系统是大小写不敏感的, 在开始下载AOSP源码之前,一定要确保这一点。

建议您专门购买一个移动固态硬盘,将它格式化为支持大小写敏感的文件系统。毕竟,AOSP源码源码是非常的大, 动辄就是百十来GB,我们电脑自带的硬盘很可能是不够用的。

1.6.3、操作步骤

step1、创建一个存放源代码的目录

mkdir -p /Volumes/SamsungPSSDT5/android-11.0.0_r30

step2、进入刚刚创建的目录

cd /Volumes/SamsungPSSDT5/android-11.0.0_r30

step3、下载android-11.0.0_r30分支的清单文件

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r30

step4、根据清单文件同步该分支的所有代码

repo sync

step5、查看同步完的目录结构

step6、建立编译环境

source build/envsetup.sh

step7、清除上次编译生成的产物

make clobber

step8、设置要生成的目标

lunch [aosp_arm64-eng]

step9、编译

make -j8