【Android源码】Gerrit上传Android源码

news2025/1/13 15:41:01

关于Gerrit的安装参考下面链接
【Android源码】Gerrit安装

要实现上传Android源码,需要经历以下几步:

  1. 下载Android代码
  2. 创建源码仓库
  3. 创建manifests仓库
  4. 上传源码
  5. 其他电脑下载源码

要证明Gerrit中的源码真实可用,肯定是以其他人能真正共享到代码才行,所以第5步必不可少。

1. 下载Android源码

可以参考我之前写的文章,【Android源码】AOSP下载
下面我会大致过一遍(切记,电脑的环境很重要,我以前在虚拟机上下载,问题挺多的,很烦人,后来在一台Ubuntu的服务器上下载,Android12,147G,157万个文件夹,很快就下载完了,配置很硬)

  1. 安装git
sudo apt install git
  1. 安装依赖
# 更新系统软件包
sudo apt update

# 安装必要的软件包
sudo apt install -y \
    git \
    curl \
    wget \
    unzip \
    python3 \
    openjdk-11-jdk \
    build-essential \
    zlib1g-dev \
    gcc-multilib \
    g++-multilib \
    libc6-dev-i386 \
    lib32ncurses5-dev \
    x11proto-core-dev \
    libx11-dev \
    libgl1-mesa-dev \
    libxml2-utils \
    xsltproc \
    unzip \
    ccache \
    libssl-dev \
    bc
  1. 配置环境变量
# 编辑 .bashrc 或 .zshrc
nano ~/.bashrc  # 或者 nano ~/.zshrc

# 添加以下环境变量
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
export USE_CCACHE=1

# 使环境变量生效
source ~/.bashrc  # 或者 source ~/.zshrc
# 验证java
java --version
  1. 设置git身份,添加自己的邮箱和姓名
git config --global user.email "xxx@qq.com"
git config --global user.name "xxx"
  1. 验证Python3:// 至少要安装3.6以上
python3 --version
  1. 创建bin,并加入到PATH中
mkdir ~/bin
PATH=~/bin:$PATH
  1. 下载repo并设置权限
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
## 如果上述 URL 不可访问,可以用下面的:
# curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
## curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo
# 验证repo的安装
repo --version
  1. 初始化Android版本
# https://android.googlesource.com/platform/manifest
mkdir android12
cd android12
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.1.0_r1
  1. 下载
repo sync

...
Checking out: 100%(1052/1052), done in 10m4.919s
repo sync has finished successfully.

完成标准:1568660项 147.7G大小

2. 创建Android源码仓库

步骤:创建一个create.sh脚本,复制出project.list(来源android12源码:~/android12/.repo/project.list)

  1. ~/android12/.repo/project.list 这里包含了所有源码的路径
art
bionic
bootable/libbootloader
bootable/recovery
build/bazel
build/blueprint
build/make
build/pesto
build/soong
compatibility/cdd
cts
dalvik
developers/build
developers/demos
developers/samples/android
development
device/amlogic/yukawa
...
  1. 随便找一个路径创建create.sh脚本
cd ~/gerrit
touch create.sh
nano create.sh

脚本内容如下:

#!/bin/bash
 
USER_NAME="admin"
 
SERVER_IP="10.168.10.140"
 
SERVER_PORT="29418"
 
# PROJECT_DIR="aosp"
# 路径要改成自己的ssh的路径
SSH_KEY="/home/xx/.ssh/id_rsa"

eval $(ssh-agent -s)
ssh-add $SSH_KEY

echo "SSH_AGENT_PID=$SSH_AGENT_PID"
echo "SSH_AUTH_SOCK=$SSH_AUTH_SOCK"

function creatEmptyGerritProject()
 
{
 
for i in `cat project.list`;
 
do
 
echo $i
 
echo "ssh -p $SERVER_PORT $USER_NAME@$SERVER_IP gerrit create-project --empty-commit $i"
 
ssh -p $SERVER_PORT $USER_NAME@$SERVER_IP gerrit create-project --empty-commit $i
 
done
 
}
 
creatEmptyGerritProject
kill $SSH_AGENT_PID

解释一下:

  • USER_NAME : 这里是来源自己Gerrit创建的账户,我的是admin。
  • SERVER_IP: 是Gerrit服务器地址。
  • PROJECT_DIR : 很多人提供的脚本设置了项目名,我发现在,google原生代码里并没有设置这个。所以我也删掉了(其实是后面吃亏了,才重新修改了这个地方)
  • SSH_KEY: 可以设置,也可以不用设置,因为我一开始代码无法连接Gerrit服务器,是由于SSH的问题,所以做了设置,如果你本身不存在这个问题,可以删掉如下脚本
# 路径要改成自己的ssh的路径
SSH_KEY="/home/xx/.ssh/id_rsa"

eval $(ssh-agent -s)
ssh-add $SSH_KEY
  • cat project.list:将project.list和放入同一路径下执行脚本。
  • ssh -p $SERVER_PORT $USER_NAME@$SERVER_IP gerrit create-project --empty-commit $i 这句是核心脚本,其实就是将project.list中的路径一条条取出来,然后创建Gerrit仓库。
  • 最后运行sudo ./create.sh启动脚本,等待创建成功就行。
  • 成功标志是:在Gerrit Web中能看到创建了上百个仓库。

3. 创建manifests仓库

第2步创建了所有关于源码的仓库。但是,那是上千个仓库,如果我们其他电脑需要下载这些仓库,不可能单独每个都去git clone一次。所以需要创建manifests仓库,统一管理所有的库。

cd ~/gerrit
# 创建manifests仓库
$ ssh -p 29418 admin@10.168.10.140 gerrit create-project --empty-commit aosp/manifests
# 创建成功可以在Gerrit服务器中找到这个仓库
# 然后下拉aosp/manifests代码
$ git clone ssh://admin@10.168.10.140:29418/aosp/manifests

通过上面几步,可以看到创建了一个manifests文件夹。

  • 复制~/android12/.repo/manifests/default.xml 到 manifests路径下

  • 修改default.xml

    • 一定需要修改default.xml文件,因为这份default.xml是Google原生提供的,但我们Gerrit服务器的路径并不是一致的,分支也不一样(网上有很多关于default.xml的上传,但并没有人说过要改,要怎么改,我没找到)。

    • tag的修改,默认的如下

      <default revision="refs/tags/android-12.1.0_r1"   remote="aosp"  sync-j="4" />
      

      我并没有创建"refs/tags/android-12.1.0_r1"的tag,所以我改成了master

    • default.xml中包含大量的

      <project path="art" name="platform/art" groups="pdk" />
      

      后面全局下载的是时候,其实我们并没有这种"platform/art",包含"platform"路径的仓库。所以需要全局删掉name中的platform

    • 还有配置中包含name和path不一致的情况,全部按照path的内容,将name修改掉,可以自己写一个python脚本来实现(不会的自行百度)。

  • 最后提交代码

git add .
git commit -m "add default.xml"
git push origin master

最后验证:可以通过查看Gerrit Web上的提交日志, 也可以自己把代码拉取下来看看就知道了。

4. 上传源码

这一步就到了上传~/android12中的所有源码了。
创建uploadAosp.sh脚本

cd ~/android12
touch uploadAosp.sh

内容如下

#!/bin/bash
 
USER_NAME="admin"
 
SERVER_IP="10.168.10.140"
 
SERVER_PORT="29418"
 
#PROJECT_DIR="aosp"

echo "SSH_AGENT_PID=$SSH_AGENT_PID"
echo "SSH_AUTH_SOCK=$SSH_AUTH_SOCK"

function pushGerritProject()
 
{
 
file="./.repo/project.list"
 
lines=`cat $file | wc -l`
 
for ((i=1;i<=$lines;i++))
 
do
 
line=`awk 'NR=="'$i'"{print $0}' $file`
 
cd $line
 
echo `pwd`
 
rm -rf .git

git init
 
git remote add origin ssh://$USER_NAME@$SERVER_IP:$SERVER_PORT/$line.git
 
git pull origin master
 
git add -A .
 
git commit -am "init commit"
 
git push origin master
 
cd -
 
done
 
}
 
pushGerritProject
  • 如果在上传的过程中遇到权限问题,可能是因为Gerrit SSH导致的,按照第二步新增ssh-add的代码
  • 正常的日志很清楚的,自己一看就知道,出错的话,也会很明显的提示,解决错误就好了。
  • 成功截图
    在这里插入图片描述
  • 我看了下,android12的文件情况(2209660项,176.7GB大小),这还是没有编译的情况,所以做这事之前,一定要考虑清楚自己电脑的情况

5. 其他电脑下载源码

以前都是通过repo cync在google的Gerrit服务器上下载代码,这步就是通过我们自己的Gerrit服务器来下载Android12的源码了。
准备一台Ubuntu20的系统,可以是虚拟机。首先登录到Gerrit Web端,可以通过ip访问,创建一个自己本地的账户,我的是mygerrit。

  1. 首先要创建这台Ubuntu系统的ssh key
ssh-keygen -t rsa -b 4096 -C "demo@163.com"

邮箱改成自己的。
2. 复制~/.ssh/id_rsa.pub中的内容,并导入到Gerrit–>Setting—>SSH Keys中
3. 验证是否导入成功

ssh -p 29418 mygerrit@10.168.10.140

# 输出如下内容表示成功
  ****    Welcome to Gerrit Code Review    ****

  Hi hmanvm, you have successfully connected over SSH.

  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:

  git clone ssh://hmanvm@10.168.10.140:29418/REPOSITORY_NAME.git

Connection to 10.168.10.140 closed.

我遇到的问题,基本上是ssh没设置成功,导致没有拉取代码的权限,还有就是第三步中的default.xml配置出问题,导致耽搁时间了。有时需要ssh-add id_rsa来将ssh导入进去。
4. 拉取Gerrit中的源码

mkdir ~/android12
cd ~/android12
# 初始化manifests库, 第三步创建的manifests库这里用到了
repo init -u ssh://mygerrit@10.168.10.140:29418/aosp/manifests
# 最后同步
repo sync

剩下的就是等待了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1897254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea中maven全局配置

配置了就不需要每次创建项目都来设置maven仓库了。 1.先把项目全关了 2. 进入全局设置 3.设置maven的仓库就可以了

绝地求生PUBG都准备了但是一直不匹配怎么办

绝地求生PUBG&#xff0c;作为一款备受玩家喜爱的射击游戏&#xff0c;以其真实的战斗体验和策略性决策而著称。玩家们在游戏中需要熟悉地图、选择适合的装备和战斗方式&#xff0c;并与队友进行默契的团队合作&#xff0c;才能在战场上取得优势。最近很多玩家都开始下载游玩绝…

RedHat9 | kickstart无人值守批量安装

一、知识补充 kickstart Kickstart是一种用于Linux系统安装的自动化工具&#xff0c;它通过一个名为ks.cfg的配置文件来定义Linux安装过程中的各种参数和设置。 kickstart的工作原理 Kickstart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数&#xff0c;…

昇思25天学习打卡营第17天|ChatGLM-6B聊天demo

一、简介&#xff1a; 本次实验&#xff0c;基于MindNLP和ChatGLM6B模型搭建一个小的聊天应用&#xff0c;ChatGLM6B 是基于 GLM-4 模型开发的开源对话机器人&#xff0c;拥有 62 亿个参数&#xff0c;能够进行自然流畅的语言交流。在对话中&#xff0c;ChatGLM6B 可以胜任文案…

实现原理:远程过程调用(RPC)

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

破解在制品管理不透明难题

在快节奏的现代工业浪潮中&#xff0c;每一个细微的管理环节都直接关系到企业的竞争力与盈利能力。在车间生产中&#xff0c;在制品管理流程不透明是一个常见问题&#xff0c;它可能导致生产效率低下、成本增加、库存积压以及沟通障碍等负面影响。 在制品管理流程不透明&#x…

人员定位技术的行业应用,你有没有了解过?

在之前的文章中&#xff0c;新锐科创为大家讲述了&#xff0c;将人员定位技术实际应用于工厂人员定位的效果&#xff0c;大家感觉是不是有点新颖&#xff0c;那么&#xff0c;你又是否清楚人员定位技术的行业应用呢&#xff1f;如果你从来都没有了解过&#xff0c;建议看看本篇…

【EFK】efk 8收集docker容器日志测试

前言 目前&#xff0c;efk 全家桶已经更新到版本8 了&#xff0c;本章节我们使用8版本的elk搭建日志收集系统&#xff0c;了解它的配置运行过程&#xff0c;方便以后在更复杂的环境中更好的使用。 版本默认就是8最新的&#xff0c;也可以自己指定其他8的版本 elasticsearch: …

php简单商城小程序系统源码

&#x1f6cd;️【简单商城小程序】&#x1f6cd;️ &#x1f680;一键开启&#xff0c;商城搭建新体验&#x1f680; 你还在为繁琐的商城搭建流程头疼吗&#xff1f;现在&#xff0c;有了简单商城系统小程序&#xff0c;一切变得轻松又快捷&#xff01;无需复杂的编程知识&a…

Stable Diffusion美得令人心动亚洲女性真人模型、提示词分享!

前言 提示词1: 电影灯光 Prompt&#xff1a; xxmixgirl, a mysterious woman, fog, movie lights, 【colors】 theme, smiling 提示词&#xff1a;神秘女子&#xff0c;迷雾&#xff0c;电影灯光&#xff0c;【颜色】主题&#xff0c;微笑 颜色&#xff1a;可以指定一种或多种…

晨持绪电商:大学毕业生投资抖音网店怎么样

在这个数字化飞速发展的时代&#xff0c;传统的职业路径已不再是唯一的选择。对于充满激情和创意的大学毕业生来说&#xff0c;投资抖音网店或许是一个颇具前景的选择。 抖音作为一个流量巨大的社交媒体平台&#xff0c;为年轻人提供了一个展示自我、推广产品的绝佳舞台。与传统…

Kotlin/Android中执行网络请求

方式一&#xff1a;使用okhttp3 okhttp官网 okhttp3 github地址 打开build.gradle.kts文件加入依赖 dependencies {implementation("com.squareup.okhttp3:okhttp:4.9.0") }在IDEA的Gradle面板点击reload按钮便会自动下载jar 使用网络请求时需要把网络的权限打开&a…

Web缓存—Nginx和CDN应用

目录 一、代理的工作机制 二、概念 三、作用 四、常用的代理服务器 二.Nginx缓存代理服务器部署 1.在三台服务器上部署nginx 此处yum安装 2.准备测试界面 三、CDN概念及作用 1.CDN的工作过程 一、代理的工作机制 &#xff08;1&#xff09;代替客户机向网站请求数据…

echarts横向立体3D柱状图

实现原理&#xff1a;series中包含两个普通的柱状图bar&#xff0c;其宽度各占一半且设置间距barGap为0&#xff0c;再添加一个象形柱状图pictorialBar&#xff0c;symbol设为菱形diamond&#xff0c;调整其位置大小层级等数据以达到覆盖在柱状图顶部的立体效果。 运行效果&am…

找不到d3dcompiler43.dll如何修复,分享5种方法助你解决问题

电脑提示找不到d3dcompiler43.dll&#xff0c;这是一个常见的小问题&#xff0c;主要是由于该dll文件丢失所导致。在日常使用电脑的过程中&#xff0c;我们可能会遇到此类丢失问题。为了解决该问题&#xff0c;我们只需进行相关的文件修复操作即可。以下是几种常见的d3dcompile…

电子元器件基础知识总结

1.0 电阻 电阻的定义&#xff1a;导体对电流的阻碍作用称之为电阻【每一种导体都有内阻的存在】 闭合的电路中电子的移动输出有多快&#xff1f;电子在导体中的移动速度是很慢的 【铜线中电流的移动速度】 电子受到原子核的束缚&#xff0c;移动的速度很慢&#xff0c;在电压足…

平安养老险蚌埠中心支公司开展“78奋力前行”健步走活动

7月4日&#xff0c;平安养老保险股份有限公司&#xff08;以下简称“平安养老险”&#xff09;蚌埠中心支公司组织员工在张公山公园开展“78奋力前行”健步走活动&#xff0c;传递保险行业的正能量&#xff0c;展现平安养老险的活力与风采。 平安养老险蚌埠中心支公司员工身着…

2024年7月最佳免费天气API接口推荐

在我们的日常生活中&#xff0c;天气扮演着一个至关重要的角色&#xff0c;它影响着我们的情绪、健康、日常安排和商业决策。无论是计划一次户外活动、安排农作物种植&#xff0c;还是确保旅行安全&#xff0c;天气信息的准确性和及时性至关重要。随着技术的进步&#xff0c;天…

百度出品_文心快码Comate提升程序员效率

1.文心快码 文心快码包含指令、插件 和 知识三种功能&#xff0c; 1&#xff09;指令包含Base64编码、Base64解码、JSON转TS类型、JSON转YAML、JWT解码喂JSON。 2&#xff09;插件包含 3&#xff09;指令包含如下功能&#xff1a; 官网链接

vue前端实现导出页面为word(两种方法)

将vue页面导出为word文档&#xff0c;不用写模板&#xff0c;直接导出即可。 第一种方法(简单版) 第一步&#xff1a;安装所需依赖 npm install html-docx-js -S npm install file-saver -S第二步&#xff1a;创建容器&#xff0c;页面使用方法 注意&#xff1a;在当前页面引…