您的位置:首页 > 移动开发 > Android开发

如何使用repo下载部分Android源码并保持项目结构

2016-11-01 22:51 489 查看
最近打算重新折腾下Android源码,由于网速慢和Mac的SSD磁盘空间不太够的原因,打算只下载部分想研究的Android源码看看,但又想保留android源码本身的结构,因此不能直接clone github上的android源码项目。目前android 7.0源码完整下载估计在40G左右,如果翻墙下载网速比较慢,可能几天都下不好,也就不要折腾了。

在分析了.repo目录下面的文件之后,我找到一个简单的方法,可以只下载部分源码的git项目,现在安卓源码一共由500多个git项目组成,一个人想了解全部源码基本上是不可能的,只能研究下重要的或者是工作涉及的部分。

由于是Mac上,需要按照官方的说明做些准备工作,具体参考http://source.android.com/source/initializing.html#setting-up-a-mac-os-x-build-environment

,具体做法如下:

# 创建一个大小写敏感的磁盘镜像文件
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg


修改~/.bash_profile,加入2个函数

# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }


运行

source ~/.bash_profile
mountAndroid   #挂载磁盘镜像到/Volumes/android
cd  /Volumes/android


因为本文不涉及到编译源码,所以编译环境相关但步骤就不介绍了,官方文档挺详细的。

下面介绍下repo吧

repo是什么?

repo是一种代码版本管理工具,它是由一系列的Python脚本组成,封装了一系列的Git命令,用来统一管理多个Git仓库。

为什么要用repo?

因为Android源码引用了很多开源项目,每一个子项目都是一个Git仓库,每个Git仓库都有很多分支版本,为了方便统一管理各个子项目的Git仓库,需要一个上层工具批量进行处理,因此repo诞生。

最后重点到了,看下.repo/manifests/default.xml文件,内容大概如下

<?xml version="1.0" encoding="UTF-8"?>
<manifest>

<remote  name="aosp"
fetch=".." />
<default revision="refs/tags/android-7.0.0_r14"
remote="aosp"
sync-j="4" />

<project path="build" name="platform/build" groups="pdk,tradefed" >
<copyfile src="core/root.mk" dest="Makefile" />
</project>
<project path="build/blueprint" name="platform/build/blueprint" groups="pdk,tradefed" />
<project path="build/kati" name="platform/build/kati" groups="pdk,tradefed" />
<!-- <project path="build/soong" name="platform/build/soong" groups="pdk,tradefed" >
<linkfile src="root.bp" dest="Android.bp" />
<linkfile src="bootstrap.bash" dest="bootstrap.bash" />
</project>
<project path="abi/cpp" name="platform/abi/cpp" groups="pdk" />
<project path="art" name="platform/art" groups="pdk" /> -->
......
</manifest>


看到了吧,只要把不需要下载的源码project注释掉,然后运行repo sync就可以只下载没有被注释掉的项目了。当然这种办法只能用了研究源码,如果要编译源码,只下载一部分肯定是不行的。

repo sync后的项目结构如下:

tree -L 1
.
├── CleanSpec.mk
├── blueprint
├── buildspec.mk.default
├── core
├── envsetup.sh
├── kati
├── libs
├── target
└── tools

cd kati
repo info .
Manifest branch: refs/tags/android-7.0.0_r14
Manifest merge branch: refs/heads/android-7.0.0_r14
Manifest groups: all,-notdefault
----------------------------
Project: platform/build/kati
Mount path: /Volumes/android/N/build/kati
Current revision: refs/tags/android-7.0.0_r14
Local Branches: 0


这样我们就实现了用repo sync只下载想要的安卓源码项目的目的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 源码