博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows环境下repo下载Android源代码
阅读量:6359 次
发布时间:2019-06-23

本文共 5185 字,大约阅读时间需要 17 分钟。

由于公司的制度的使然,开发环境只能局限于Windows下,所以不得不在Windows下挣扎徘徊。这破逼公司真是手机业界的一朵奇葩,想起来便让人久久不能释怀。

官方推荐Android源码的下载方式是Linux系统上是通过Repo来完成的。Win环境下Repo的使用又依赖Git、Python。源码的下载又涉及到伟大的长城防火墙。所以这篇文章的核心有三个:安装Repo依赖环境、让Repo在Win上面跑起来、使用国内源避开墙。

如果是使用Win10上面用Linux子系统下载,可以参考(不过依然还是会出问题)。如果直接在Win环境下面,可以参考本教程。

以下是Win下面下载Aosp源代码的步奏。


一、安装git(版本控制工具)

安装后

将git添加到环境变量中 C:\Program Files\Git\cmd;
将MinGW添加到环境变量中 C:\Program Files\Git\bin;

二、安装pyton(pyton编辑工具)

版本选择2.7+,否则会报异常ypeError: startswith first arg must be bytes or a tuple of bytes, not str

安装后

将Python添加到环境变量中 C:\Program Files\Python27;

三、选择合适的源

所谓的源就是链接。由于官方的源基本处于连接不上的状态,在此我们选择了清华镜像站的源。下面涉及到源的地方全部默认使用清华镜像站的源

Android官方:
清华大学镜像站:

四、安装Repo

4.1 容易走歪路的Repo

官方提供Repo在Windows跑起来上会报错,我们不建议大家使用官方的Repo。但是我们还是先教大家几种下载Repo的方式,一心只关心源码的同学可以跳过这节

4.1.1 curl url > ~/bin/repo
mkdir ~/binPATH=~/bin:$PATHcurl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repochmod a+x ~/bin/repo

这种方式我们不推荐,因为下载下的只有一个repo文件,repo init肯定会失败,而且还会把 .repo文件夹 删除掉。完全是浪费时间。

当然,这种方式在Linux环境中还是有好处的,将Repo添加到了环境变量中,以后敲命令很方便的。

4.1.2 git clone url

这种方式可以下载完整的Repo文件

git clone https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
4.1.3 浏览器

在Windows上最简单的下载方式,把源拷贝到浏览器地址栏中就行。

这种方式和git clone方式得到的文件是一样的

4.2 下载推荐的Repo客户端

如果你下载了原生的Repo,你就会发现,在Win上面运行会报错,还需要修改源。如果你熟悉Python,可以自己调试一下。如果不熟悉,可以使用我们推荐的这个 。

这是一个德国公司修改过的客户端,适配了Windows 。之后我们稍微调整下就可以了。

下载后可以解压到源码所在的文件夹。比如我的放在了 “E:\LocalProject\Oreo\git-repo-stable”

五、源码下载

在源码所在文件夹

右键
Git Bash Here
输入以下命令

git-repo-stable\\repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r7

android-8.1.0_r7是版本号,更多的版本号可以查看

repo init 之后,源码文件夹下会多一个.repo的文件夹。打开E:\Preo\.repo\repo\project.py。修改279行def __linkIt(self, relSrc, absDest)方法。如果不修改会报“WindowsError: [Error 5]”的错误。具体分析可见

def __linkIt(self, relSrc, absDest):    # link file if it does not exist or is out of date    # if not os.path.islink(absDest) or (os.readlink(absDest) != relSrc):    if not portable.os_path_islink(absDest) or (portable.os_path_realpath(absDest) != relSrc):      try:        # remove existing file first, since it might be read-only        if os.path.lexists(absDest):            #  os.remove(absDest)            # 增加这段              if os.path.isfile(absDest):                 os.remove(absDest)            else:                os.removedirs(absDest)            # 增加这段            else:          dest_dir = os.path.dirname(absDest)          if not os.path.isdir(dest_dir):            os.makedirs(dest_dir)        # os.symlink(relSrc, absDest)        portable.os_symlink(relSrc, absDest)      except IOError:        _error('Cannot link file %s to %s', relSrc, absDest)

然后再打开E:\Preo\.repo\manifest.xml,将以下三个项目注释掉,不然会报“cannot initialize work tree”,具体分析可见

然后敲入最后一句命令就大功告成了!

git-repo-stable\\repo sync

repo sync后面还可以加这些参数

repo sync -cdf --force-sync  同步代码时为了安全,可以在同步时覆盖掉已经存在的代码repo sync -c 只下载当前分支,可以加快代码下载速度,而且节省硬盘空间repo sync -f 下载到某个项目失败了,我们可以用-f属性来让它继续下载,失败的项目我们回头再说。-c,   --current-branch   fetch only current branch from server-d,    --detach           detach projects back to manifest revision    -f,    --force-broken     continue sync even if a project fails to sync    --force-sync   overwrite an existing git directory if it needs to point to a different object directory. WARNING: this may cause loss of data

接下来漫长的等待,大概睡一觉就下载完了。睡不着的小伙伴可以看看下面的两个教程,增强记忆。

Android提供的教程:
清华大学镜像站提供的教程:

六、用下载软件下载Android源码

好吧,有些同学实在不想这么折腾,想简单快捷,也不是没有办法的。

android-6.0.1_r72
链接: 密码: ik6t
android-7.1.1_r1
链接: 密码: pfsq
android-8.0.0_r1
链接: 密码: bthv

再来一个Android历史以来的代码,并且会一直更新,目前是45G。

下载 ,下载完成后记得根据 checksum.txt 的内容校验一下。

由于所有代码都是从隐藏的 .repo 目录中 checkout 出来的,所以我们只保留了 .repo 目录,下载后解压 再 repo sync 一遍即可得到完整的目录。使用方法如下:

wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包tar xf aosp-latest.tarcd AOSP   # 解压得到的 AOSP 工程目录# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录repo sync # 正常同步一遍即可得到完整目录# 或 repo sync -l 仅checkout代码

此后,每次只需运行 repo sync 即可保持同步。 我们强烈建议您保持每天同步,并尽量选择凌晨等低峰时间

七、遗憾的事情

按照上面的教程我们就得到了想要的代码,发个截图给大家参考一下

图片描述

到这里应该编译源代码了,但是我们初始化环境就会发现报错“Only bash is supported”

$ source build/envsetup.shps: unknown option -- oTry `ps --help' for more information.WARNING: Only bash is supported, use of other shell would lead to erroneous results

一直以为Git Bash就是Bash,到这里才发现其实不一样。所以下载了这么一堆,我们其实并没法编译,只能看看。这下真的只是在外边蹭蹭不进去了。所以想和Android深入交流还是使用Linux吧。

FAQ

1.出现 curl: (22) The requested URL returned error: 404 Not Found Server does not provide clone.bundle; ignoring. 怎么办?

无视即可。

2.有的同学在执行repo init命令的时候可能会出现这样的提示

error.GitError: manifests var: *** Please tell me who you are.Rungit config --global user.email "you@example.com"git config --global user.name "Your Name"to set your account's default identity.Omit --global to set the identity only in this repository.

使用git要设置账号

git config --global user.email "you@example.com"git config --global user.name "Your Name"

3.有些网站的源为什么是git://android.git.kernel.org/platform/manifest.git

android.git.kernel.org是google以前用来下载android的网址,现在不用了。据说是服务器被黑了。

参考链接

repo sync配合manifest下载旧版本代码

Git Repo 镜像使用帮助
Android 镜像使用帮助
官方下载源代码教程
官方Repo开发教程
官方Repo 命令参考资料
官方代号、标记和细分版本号
repo - The multiple repository tool (also works on MS Windows!)
window7下配置下载android源码环境,安装Repo
repo下载Android源码(国内镜像)
Android源码下载(包括最新8.0版本)
深究repo的所谓“续传”功能
Android源代码仓库及其管理工具Repo分析

转载地址:http://bvbma.baihongyu.com/

你可能感兴趣的文章
抽象工厂理解
查看>>
计网第四章网络层(二)
查看>>
vs 行数
查看>>
nodejs下的express安装
查看>>
表单中的单文件点击和拖拽上传
查看>>
BZOJ1396 识别子串
查看>>
【转】numpy中 meshgrid 和 mgrid 的区别和使用
查看>>
【转】python中的闭包
查看>>
编程总结模版
查看>>
成为linux的合格公民
查看>>
小心陷阱:二维动态内存的不连续性
查看>>
转:关于启用 HTTPS 的一些经验分享(一)
查看>>
复习HTML、CSS、JS练习题
查看>>
[Android] 进程(Process)和线程(Thread)
查看>>
STL容器及泛型算法
查看>>
Android 检查手机和电脑连接的时候,执行 adb devices后,提示adb server is out of date. killing.....
查看>>
Django---分页器、中间件
查看>>
Hybrid设计--离线更新
查看>>
夜间模式的开启与关闭,父模板的制作
查看>>
WP7之文件传送利器(web service)
查看>>