文章目录

  • 前言和repo简介
  • 源码下载
    • 准备repo
    • 初始化
    • 代码同步
  • 问题总结
    • 网络错误
    • 找不到版本
    • 个人小结

前言和repo简介

众所周知,当前世界上最大的同性交友网站GitHub,里面几乎收藏了全球所有的代码。那么安卓系统的源代码也都保存在Github上,但安卓系统具体包含的有上百个git代码库。因此想要安卓系统源代码,一个一个把所有组件的git库git clone下来就可以了,但这种方式过于呆萌,不像一个程序猿。对于程序猿,这种重复性的工作自然通过脚本就可以轻松实现,CSDN上也都有很多人提供了这种脚本。不过贴心的谷歌官方为了方便大家下载AOSP,也提供了一个脚本工具——repo

根据上面的描述,大家也都能猜到实际上repo就是一个包含了一系列git命令的脚本文件,官方和华为云上都有中英文文档详细介绍该工具的具体使用方法。其主要思路就是通过xml格式的manifest文件来定义一个比较大的系统中包含的所有project信息,之后repo就根据这些定义以及当前本地文件的状态,去执行相应的git命令。

源码下载

由于安卓是谷歌的项目,而国内由于墙的原因,按照谷歌官方文档往往无法正常下载,好多人可能谷歌的官方文档链接都打不开。翻墙的方式现在也有很多,不过没有VPN的同学也可以在国内很方便地使用清华AOSP源和中科大AOSP源,下载AOSP源码。

准备repo

首先repo实际上就是一个python脚本,因此python一定要安装好,并且配置好环境变量。从git库同步代码自然也少不了git命令,安装好git之后也需要配置好git中的用户名和邮箱,常用如下命令:

git config --global user.name "username"
git config --global user.email "your.email@xxx.com"

之后与AOSP类似,repo脚本也有三个来源:

  • 谷歌官方脚本:curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
  • 清华源: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

要运行repo自然就要赋予该脚本文件运行权限:chmod a+x ~/bin/repo,之后就可以使用该脚本进行源代码下载和同步了。

初始化

之前提到repo命令需要读取xml格式的manifest文件来了解整个系统中包含的各个项目的具体信息。因此先要运行repo init方法下载AOSP的项目清单文件。其中用到的两个主要参数分别为:

  • -u:即获取清单文件的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
  • -b:对应AOSP的版本或分支(branch),AOSP的安卓版本和对应的分支tag列表可在官网查询。

具体的初始化命令举例如下,从谷歌官方下载安卓11的一个修订版:

repo init -u https://android.googlesource.com/platform/manifest -b android-11.0.0_r33

repo的运行过程中会尝试访问官方的git源更新自己,因此若报错无法连接到 gerrit.googlesource.com类的问题,可以通过设置环境变量REPO_URL使其到清华源或中科大源去检查更新,具体的URL与下载repo的路径一致:

  • 清华repo:export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
  • 中科大repo:export REPO_URL='https://gerrit-googlesource.proxy.ustclug.org/git-repo'

经过初始化后,就有了.repo文件夹,其中.repo/manifests/default.xml就是AOSP包含的所有git项目的列表信息。

代码同步

最后执行repo sync也就是具体的下载更新的过程。该过程时长根据网速决定,下载下来的内容接近100G,因此硬盘一定要保证有充足的空间。

问题总结

网络错误

下载过程中,往往有各种GnuTLS的网络报错,具体报错信息如下:

curl 56 GnuTLS recv error (-9): Error decoding the received TLS packet
curl 56 GnuTLS recv error (-54): Error in the pull function.
GnuTLS recv error (-110): The TLS connection was non-properly terminated

网上搜索有多种解决方案:

  • 对git进行如下的设置:

    # 增加git缓存
    git config --global http.postBuffer 5000000000
    # 关闭git SSL验证
    git config --global http.sslVerify false
    # 关闭git压缩
    git config --global core.compression -1
    
  • 设置网卡,增加网络的MTU值,到最大10000;
  • 完整安装gnutls包:sudo apt install gnutls-bin
  • 重新编译git,使用openssl库代替GNUTLS库,参考CSDN博客;
  • 设置为单线程下载,在同步时添加-j1参数,使同步过程仅使用一个线程repo sync -j1

上述方法均不成功,仍然会有网络问题爆出。尤其是单线程同步,设置为单线程导致同步十分缓慢,而且同样也会有错误爆出,强烈不推荐!

找不到版本

除了网络错误,下载过程中同样也有如下的版本错误:

platform/build/blueprint:
fatal: 无法找到远程引用 refs/tags/android-11.0.0_r33error: Cannot checkout platform/build: ManifestInvalidRevisionError: revision refs/tags/android-11.0.0_r33 in platform/build not found
error: in `sync`: revision refs/tags/android-11.0.0_r33 in platform/build not found

然而在谷歌官网可以看到/platform/build下存在android-11.0.0_r33的tag,并且对应的网页也是可以打开的。

个人小结

个人认为就算是版本找不到的问题,貌似也是网络原因导致的,总而言之下载过程最好保证有一个较为良好的网络环境。同步过程中的问题可以忽视,但同步完成后,发现仅下载了50G左右,而且内容绝大多数都在隐藏文件夹.repo中,故此时可以认为没有成功下载。最简单的方法实际上最终解决了问题,那就是不断尝试repo sync。并且尝试的过程中,如果有VPN,也最起码使用VPN进行一次sync。同时没有必要在多个源上重新下载,每次同步都可以在几个AOSP源之间进行切换,切换的方式很简单,就是修改.repo/manifests.git/config文件,替换其中的url参数:

  • 谷歌官方:url = https://android.googlesource.com/platform/manifest
  • 清华源:url = https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
  • 中科大源:url = git://mirrors.ustc.edu.cn/aosp/platform/manifest

同一个文件夹下每次repo sync使用不同的源是没有问题的,本质上使用git,其优势就在于可以检测到不同,并且仅同步不同之处。

repo下载安卓源码记录相关推荐

  1. Gitolite + repo 搭建安卓源码开发环境

    Gitolite + repo 搭建安卓源码开发环境 转载请注明出处:http://blog.csdn.net/u011479494/article/details/50629669 相比gitosi ...

  2. windows编译安卓源码记录

    环境 Windows10 + vmware17 + ubuntu22 ubuntu环境设置 装完ubuntu系统后拖拽复制文件进去验证vmtools功能情况,如果vmtools异常很麻烦,试了n多方法 ...

  3. 下载安卓源码都干了什么?

    闲来无事,想瞅瞅安卓wifi的框架是什么样子滴,就有了如下的记录 目录 1.准备linux系统 2.创建samba共享目录 4.下载源码 5.下载repo 6.同步代码 7.完成同步,开始阅读 1.准 ...

  4. 高通410c下载安卓源码

    已经编译成镜像文件的的可以在96boards下载到: https://www.96boards.org/documentation/ConsumerEdition/DragonBoard-410c/D ...

  5. 安卓编译安装python_安卓源码编译环境搭建

    本编译环境以 Ubuntu 14.04 系统为例 修改软件源(可选) 安装相关依赖 安装Android编译工具JDK 一. 修改软件源(可选) : sudo gedit /etc/apt/source ...

  6. 安卓源码AOSP下载使用的正确姿势

    安卓源码AOSP下载使用的正确姿势 从同步源码到编译完成,整个过程应至少准备200G空间. 编译时需要的内存数与编译线程数相关,博主实测比较极限的配置是4核8G,超过这个范围将触发swap交换导致编译 ...

  7. ubuntu系统下安卓源码的下载

    以前可以采用git clone方法下载Android单个目录源码的方法,但是目前Google对源代码的管理网站已经进行了更改,直接采用下载源代码已经失效.本文介绍了在Ubuntu下(在Windows下 ...

  8. 安卓源码(一)下载与同步

    推荐系统:基于Debian8的Linux发行版,ubuntu16.04,(因为安卓源码实在ubuntu下编译的,redhat系没有) 我使用的系统:Deepin15.3(ubuntu是debian8 ...

  9. 简洁的安卓软件下载页源码

    介绍: 简洁的安卓软件下载页源码 网盘下载地址: https://zijiewangpan.com/QMOkB99n2hg 图片:

最新文章

  1. 是否能领先e步 浅析SSD中的eTLC和eMLC颗粒
  2. 点空白也弹窗口。看我弹
  3. CG-CTF-Web-文件包含
  4. windows控制linux桌面图标,完全控制你的Windows桌面 (转)
  5. java被3整除的数_java中计算1-200以内可以被3整除的数,输出这些数并统计一共有多少个....
  6. CentOS7中搭建cobbler自动装机服务
  7. linux http error 401,出现HTTP: 401 的时候的解析思路
  8. STM32显示图片,将图片转换为十六进制数组便捷工具
  9. 学海无涯提供100-300M免费全能空间申请
  10. 将港中文建成中国计算机视觉黄埔军校的人!
  11. 趁年轻,多尝试一些富有挑战的工作吧
  12. nuxt整合vue-pdf插件和使用createLoadingTask方法进行分页
  13. 旋度的散度恒为0(公式推导)
  14. 图书条码mysql数据库_中琅条码软件如何连接MySQL批量生成128码
  15. 项目管理办公室(PMO)和项目经理(PM)的区别
  16. GeoTools开发GIS图形界面应用程序
  17. 大一第二学期周报4Web基础
  18. python障碍式期权定价公式
  19. 连锁不平衡以及连锁不平衡衰减
  20. [游戏商业化]一些基础概念点,做个记录

热门文章

  1. Glove与Attention机制资料的整理
  2. Printk打印内核日志
  3. Linux设备模型_导航篇
  4. 用STM32F407ZET6的HAL库写一个串口接收,发送代码,支持ringbuff
  5. 深入理解常见的二十三种设计模式
  6. apollo配置中心之--spring boot如何加载apollo
  7. CAD块怎么创建?CAD块创建和使用教程
  8. 制作企业网站一般要花多少钱
  9. 为啥需要RPC,而不是简单的HTTP?
  10. Elasticsearch:在 Elasticsearch 中使用语言识别进行多语言搜索