推荐几个自学做衣服的网站,沈阳网站设计营销型,体验营销案例,上海网络哪家比较好任何一个学习Android开发的开发者如果想要深入学习Android#xff0c;一定要看Android源码#xff0c;网上关于下载Android源码的教程有很多#xff0c;如果你已经翻墙了#xff0c;你可以直接参考Google官网的教程或者老罗最新出的教程#xff0c;如果你还没有翻墙#…任何一个学习Android开发的开发者如果想要深入学习Android一定要看Android源码网上关于下载Android源码的教程有很多如果你已经翻墙了你可以直接参考Google官网的教程或者老罗最新出的教程如果你还没有翻墙你可以用清华大学的Android源码镜像。
我一开始没有用他们所推荐的Ubuntu下载而是在听闻Windows 10专业版里内置了一个Ubuntu子系统以后我尝试用Windows 10下载源码但遇到很多问题在网上又搜不到相应的解释而且repo这个东西搞得我很混乱完全不知道是个啥后来公司内部也开始切换到repo和git了才渐渐搞懂两者的关系也“成功”在Windows 10 下载了Android 源码。
Git作为一个版本控制工具功能很强大新建分支切换分支都很快小团队用Git就能很好地管理好了但如果是Android系统如此庞大的工程呢我们知道全套Android源码是很大很大的目录结构也很复杂如果直接将其init成一个Git库简直是灾难也不符合解耦的要求。 要知道Git是无法将整个库中间的某个目录单独clone出来的这样如果我只是负责frameworks的但我下代码的时候却得把整个都下下来。
那怎么办呢很简单分模块嘛比如就把根目录下的每个目录当做一个单独的Git库这样开发只要专注于自己的模块就行其他模块的代码就当看不见。嗯很好问题似乎解决了。但这样还不够你总得有一套完整的Android 源码才能编译出一个版本吧你怎么知道这个大版本里包含了哪个库呢有人会说为啥要记录呢不就这么些库嘛依次取出来不就行了。或许对于我们工作中接触到的工程规模来说这样是够了但Android都已经7.1.1了相比较一开始Android本身也发生了翻天覆地的变化有些模块在演进过程中可能就渐渐被抛弃了这个时候我们就需要一个定义一个文件去记录每一个版本的Android到底用了哪些库。
以上其实就是repo的原理和所解决的问题让我们来看看repo到底是做的。
当你完成了repo init以后你会在你的目录下发现一个.repo的隐藏目录进到.repo/manifest/中打开default.xml这就是之前所说的用来记录一个版本中需要哪些库的文件。下图是android-4.0.1_r1版本所对应的default.xml文件 仔细看看是不是很熟悉但Google分模块分的更细一些并不是简单地将一级目录直接就划成一个模块比如external它是以二级目录划分的而device目录下划分得更细一些。而revision定义的则是对应库的对应分支。
好了这个文件看完关闭之后我们在.repo/manifest/目录下运行git branch -a来看看。 这下就明了了吧这个manifest目录本身其实也是一个git库一个Android版本对应一个分支其中的default.xml就记录着这个版本所需要的库repo工具再根据这个文件去把取各个库的对应分支并最终组合起来。
总结一下Git管理单独的模块而repo管理所有的Git库将多个Git库组合在一起形成一个完整的大版本。
用Windows 10下载源码遇到的问题
下载到最后会出现如下的错误提示
# ~/repo init -u https://android.googlesource.com/platform/manifest
# ~/repo sync
...
Fetching projects: 100% (512/512), done.
Syncing work tree: 59% (303/512) error: unable to create file tests/P_str_escape/str\\escape.rs (No such file or directory)
Traceback (most recent call last):File /root/android/.repo/repo/main.py, line 531, in module_Main(sys.argv[1:])File /root/android/.repo/repo/main.py, line 507, in _Mainresult repo._Run(argv) or 0File /root/android/.repo/repo/main.py, line 180, in _Runresult cmd.Execute(copts, cargs)File /root/android/.repo/repo/subcmds/sync.py, line 769, in Executeproject.Sync_LocalHalf(syncbuf, force_syncopt.force_sync)File /root/android/.repo/repo/project.py, line 1247, in Sync_LocalHalfself._InitWorkTree(force_syncforce_sync)File /root/android/.repo/repo/project.py, line 2393, in _InitWorkTreeraise GitError(cannot initialize work tree)
error.GitError: cannot initialize work tree
rootlocalhost:~/android#
1234567891011121314151617181920
这个问题已经确认是Windows 10 bash的一个问题不过我估计一时半会儿是没辙了。原因其实很简单仔细看看“tests/P_str_escape/str\\escape.rs”这个文件名你在Windows系统下见过这么奇怪的文件名吗因为Windows系统根本就不支持这样的文件名\/:*?”|这几个字符在Windows下是不能出现在文件名当中的。连接中还提供了一种方法在/home/usr_name/目录下下载源码但我C盘没那么大空间了我就没试有条件的同学可以试试。
难道在Windows下我就下不了源码了吗其实放宽点条件还是可以的只要你不需要编译系统只是想看看源码还是可以的。既然那几个文件创建不了那我不下了还不行嘛不能因小失大嘛。
首先运行repo sync --trace这样下次出错的时候你就能知道出错的那几个文件属于哪个模块然后到.repo/manifest/default.xml中将对应的模块删掉就好了这样一个约等于完整的源码就能下到本地了只是用作研究看一看是没有问题的。可以看到我去掉了三个模块这三个模块暂时和我研究的方向还没有关系就先这样吧 _(:з」∠)_