「Do.016」AndroidStudio不用编译,阅读Android源码

image

首发公众号:Android程序员日记
作者:贤榆的榆
如果你觉得有帮助欢迎关注、赞赏、转发
阅读时间:2616字 6分钟

写在前面

很早就像自己搭一个Android源码阅读环境,折腾了几次无果,就搁置了。最近有点闲暇时间,再加上也觉得是时候更深刻的认识Android系统了,所以再折腾了一次,没想到成功了,而且是用AndroidStudio阅读,还是那个熟悉的界面,还是那个熟悉的快捷键,哈哈,你也试试?

首先呢,之前有研究过用AndroidStudio阅读源码的,应该都知道,如果想用AS阅读Android源码差不多分这样四个步骤

  • Step 1: 下载源码
  • Step 2: 编译源码
  • Step 3: 用AS导入源码
  • Step 4: 阅读源码

尝试过的朋友就知道,编译源码这个步骤应该是一个比较让人难过的过程。可能你的编译花的时间比你下载还长。不过在尝试了很多次之后,我也完美的搭好了AS阅读源码的环境。下面我就告诉大家如何做到不用编译就能导入AS阅读Android源码。

Android源码阅读环境搭建

1、下载初始化源码库

AOSP(Android Open Source Project)初始化包下载地址:
https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
将该网址复制到浏览器即可下载,迅雷好像不能使用,至少我的没用。另外需要注意的是,下载的过程中,不要合上电脑。我都下载了18g就因为合了一下电脑,结果就要从头再来了。

当然源代码下载,除了直接下载这个初始化包,你也可以先装repo工具,然后用repo同步。反正无论是哪种方式,中间都不能断。
关于源码下载更多信息可以查看下面两个网站:
过清华大学开源软件镜像站:
*https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ *
google官网:
https://source.android.com/source/downloading.html

2、下载repo工具

差不多下载最新的初始化包,你需要好几个小时,网速不好,甚至要10几个小时。那么在这个过程中我就可以把后面同步和检出代码需要的的repo工具安装一下,在命令行中执行如下代码,(我的是mac,win的话,大家可以google一下对应的教程,应该会有很多)

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

3、同步并检出源码项目

下载完成以后会得到一个37g的以aosp-latest命名的tar文件,然后将其解压可以看到里面有一个.repo的隐藏文件(mac 下载查看隐藏文件的快捷键Command+Shift+ .

接下来使用命令行进入到解压的根目录然后运行repo sync,然后就可以同步到最新的分支,并检出其master分支。

当然你也可以不同步直接使用 repo sync -l 来检出repo里面的源码项目。
检出后的效果是这样的:

image

4、关键一步——放入编译文件

其实之所以需要编译,这个和我们的Android项目是一个道理,我们从github上拉下来的开源Android项目也是没有.iml等配置文件的,需要我们自己再编译一边,才能让这个项目里的个文件在AS关联起来。

那么在这里之所以不用编译,不是真的无需编译。而是有一位简书ID是difcareer的小伙伴已经帮我们把各个版本需要的AS配置文件已经编译好,我们只需要将它下载下来放到项目的根目录就ok了。
as配置文件git地址:
https://github.com/difcareer/AndroidSourceReader

注:
如果你忘了自己源码检出的版本可以通过如下方式查看:
根据目录'/build/core/version_defaults.mk' 打开version_defaults.mk文件,然后找到�PLATFORM_SDK_VERSION这个关键字的值,就可以在下表中找出相应的版本。

image

如果是28 当然就是Android 9.0了

5、将源码项目导入到AS

准备工作已经做完了下面就可以像导入一个Android项目一样导入AOSP目录了。进入AOSP目录选择被识别出来的.ipr文件,然后点击open即可。

image

这里有两个个问题需要注意一下:

  • 第一次导入的时候,可能你看到的只有那几个刚才放入的配置文件,而看不到其他的目录,这个时候需要点击File->Invalidate Cashes/Restart...,让AS重新启动编译一下项目。
    image

    这个编译的状态差不多会持续10几分钟。然后将右边文件目录切换到Project模式下:
    image
  • 如果出现循环执行任务Scanning file to index.... 不动
    image

    解决办法如下(Open module setting --> Modules --> 找到gen文件夹 --> 选择Resources
    image

6、好了导入成功

那么接下来我们就可以自由的翱游在Android源码的海洋了,让我们来看一下吧!


image

最后,要感谢一下「代码GG之家」的明哥,8年Android手机开发的老大哥。在源码阅读环境搭建和源码阅读方式与技巧上都给我很大的帮助。这里我把明哥在星球里的回答贴出来分享一下:

image

另外,我也强烈推荐明哥的「Android答疑解惑」星球。毕竟,成长的道路上,我们需要弄清的不是距离起点有多远,而是距离下一个终点有多近。我相信明哥会是那个让能够告诉你离终点有多近的人。

推荐阅读

系列文章

其他

欢迎大家关注我的公众号