WSL下获取可编译的Android源码 作者: LYC 时间: 2020-09-14 分类: Android,工具类知识学习 # 简介 本文主要介绍如何在WSL子系统中编译Android源码,并查看方法之间的关系。有助于Android工程师深入理解Android,提高自身开发水平。 [TOC] ## 源码查看方式 目前Android源码查看有几种方式: * 使用Android Sutdio下载源码 * 使用opengrok在网页查看源码 * 自己编译源码 比较这三者,首先使用AS可以直接获取源码,但主要面向APP开发者,只能看不能改,并且不是所有都开放。而且要等新版本出来后才可以下载之前的版本。我前几周使用SDK30,但获取不到SDK30的源码,最后等到前几天Android11发布,才可以下载。(不过也可以下载SDK29的源码,修改某些东西,一样能看)。 opengrok最方便,本身就是适合部署大型代码库,查看搜索都比较方便。但是不太舒服的就是不好查看方法之间的关系。 自己编译源码,可以针对源码进行修改,可以更清晰的查看方法之间的关系,就像引用别人的开源项目一样。缺点是非常麻烦,而且源码很大(100GB),对个人和电脑考验很大(我快崩溃了)。 ## 补充 截止到目前2020年9月14日,我还没有完成编译的全部内容。先将过程和遇到的错误、对应的解决方法罗列出来,以作总结。 # 为什么使用WSL 首先编译Android源码要使用Linux或者mac,官方使用的编译环境就是Ubuntu操作系统。但是要我在Windows下面安装双系统或者虚拟机是不可能的,这辈子都不可能的。因为电脑总共就256+512GB,没那么多空间搞这种东西。 并且我在之前了解到WSL确实非常好用方便,轻量。同样是Ubuntu,为什么WSL就不行呢?后来发现好像真的可以哎,于是就一头钻入了这个深渊之中。 先说实际操作中最大的问题就是文件太大,而且要翻墙,使用wget命令简直要死人。于是百度后换了种方法。 先上参考文档 [网上博客](https://www.jianshu.com/p/0e52e06a43b1) [清华镜像及使用帮助](https://mirrors.tuna.tsinghua.edu.cn/help/AOSP) # 步骤(及问题) 其实步骤都是一样的,我也只是邯郸学步罢了(但是为什么我会遇到这么多的问题呢?) ## 安装repo repo不过多介绍了,Android+Git肯定会用到repo的。 打开Ubuntu bash,依次执行以下命令 ``` bash # 在主目录下创建bin文件夹 mkdir ~/bin # 将bin目录添加至PAHT环境变量中 PATH=~/bin:$PATH # 下载repo至该目录下 curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo # 给repo添加可执行权限 chmod a+x ~/bin/repo ``` 到这一步,基本都不会出现什么问题,这个下载也不会有网络的问题。 ## 下载初始化包 下面问题就来了,这里有两个问题: * WSL本质上应该在C盘,所以下载的文件(很大)不应该放在根目录(准确的说只应该放在挂载的mnt目录下) * 下载要翻墙 第一点很好解决: 在Windows中的D盘或者什么盘创建文件夹,将其作为源码存放的地址。 ``` bash cd /mnt/d/Code/ mkdir SourceCode ``` 将文件下载至SourceCode文件下即可。 第二点就不好搞了,不要说不翻墙,就是能翻墙,这玩意30GB+WSL好像不能直接访问境外数据=GG。 很明显的,我们就要寻找国内镜像。很轻松的,我们就会找到清华或者科大镜像,甚至我们还找到了他们的使用说明(就是上面那个网站)。根据清华的介绍,我们有两种方法可以下载: * 传统初始化方法 * 使用每月更新的初始化包 但是如果采用传统法,repo init,你大概率会失败。 如果采用第二种,wget,同样要等到死。 原因都是一样的,文件太大,第一种失败只能从头开始。 于是,你会想到,为什么要在Windows系统中使用wget命令? 于是,复制链接,打开迅雷、IDM等什么都行,创建下载链接,选择下载位置,over。 于是第一个大问题被顺利解决。 > 注:清华镜像建议我们半夜同步,所以也许还得写个脚本? ## 解压 下载好按照说明书接着执行命令就行。 ``` bash tar xf aosp-latest.tar cd AOSP # 解压得到的 AOSP 工程目录 # 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录 repo sync # 正常同步一遍即可得到完整目录 # 或 repo sync -l 仅checkout代码 ``` 此时有一个小问题和一个疑点。 很明显的,既然下载都是在Windows上了,没必要解压还用tar命令了吧,于是随便用什么软件卸载就好啦,又快又省事。 **注意,使用解压软件时记得以管理员身份运行,不然无法解压** 但是我怀疑使用第三方软件解压会有问题,因为我在后面的同步命令中发现会报error问题。 好,解压也完成了。就差最后一个命令了:repo sync.然后我又遇到问题了: *error: .repo/manifests/: contains uncommitted changes* 问题原因:本地文件出现变化,但是没有commit 我:???不是刚下的代码吗? 网上解决方法: 1. * cd .repo/manifest * git stash * git clean -d -f * 目的是删除变化记录目录 * 我:很有道理,没有用 2. * git reset --hard * 我:很简单,没有用 3. * 确保父目录没有.repo * 我:好,没有用 4. * 终于找到解决办法了 * git config core.filemode false * 更改其文件模式 * 终于成功了 当然也有可能是共同作用的结果,毕竟前面逻辑都说得通。。。 可能的解决办法: [Stack Overflow网站提供的可能解决办法](https://stackoverflow.com/questions/33690237/repo-sync-error-repo-manifests-contains-uncommitted-changes) # 未完不知道待不待续 标签: git, Android, WSL, AOSP, repo
过了一年我才发现,之所以我一直没有成功,因为AOSP实在是太大了,repo后的代码至少一百个G,编译占据的时间和空间更大,肯定成功不了