grepcode都无法访问了,如何更好的阅读源码

有一次当我打开grepcode 的时候,显示了503,我以为只是短期的服务器错误,没想到持续到现在了...

相同的体验还有

其实还有些大大小小的站也关闭了,很忧伤...

好了,回到主题,本篇主要讲如何阅读 Android framework 层的源码。

看下 Android 的整体架构:

关注本号的大多数同学都是做应用层的,所以对我们来说一般只要看到Framework 的源码:

比如:AMS,WMS,PMS 等...包括上周推送的 AccessibilityService 源码,以及 Activity 生命周期是如何回调的,都涉及到该类知识。

本篇文章不讨论,能够下载整个几十G的源码,修改编译后,导入到 AS的方式,成本比较高,可以自行搜索。

1

在线查看

在线查看,这个方式一般适合有针对性的查看某个类:

网站1

http://androidxref.com/

你可以查看各个版本的源码。

给大家录制个gif:

网站2

https://www.androidos.net.cn/sourcecode

也比较方便,还是录个gif 吧:

2

我要在 AS 中看

在线查看一般都是比较精确要看哪个类的时候,并不能满足我们日常快速查看的需求。

例如我忽然想看下 startActivity 的流程,总不能还在线一个个类搜索吧,太慢了。

其实多数hide API的类源码,我们都下载下来了,不信你打开sdk 文件夹。

比如 ContextImpl 这个类:

包括 AMS 这些类,其实源码中都包含,只是在对应的android.jar 中缺少这些class 文件而已。

所以我们可以将sdk 中使用的android.jar 替换为完整的jar。

去哪找完整的jar 呢?自己编么?

自己编译成本是不是过高了,这么多人有需求,那么 github 上面肯定有啦。

https://github.com/anggrayudi/android-hidden-api

选择对应的版本,下载对应的jar 文件。

然后替换即可,例如我这里替换了android-26下的jar。

你可以将原本的改下命名保留,然后将刚下载的复制过去即可。

当你完成这些操作,AS 会自动感知到发生的变化,然后重新建立索引,稍等下就好了。

注:如果你担心有什么副作用,可以选择一个不常用的版本替换,比如你们日常使用26,你可以将25的进行替换,新建一个module compileSdk=25就可以查看了。

然后你就可以在 Android Studio 中来放肆的查看源码了:

偶尔会有一两个类找不到,那么你就可以配合在线查看的方式去看了。

3

我要自己下载framework 源码查看

当然了,自己下载源码来查看肯定是最靠谱的方式,但是自己下载有两个问题。

1. 在哪里下载呢?

2. Android 源码那么大,可以只下载framework 部分么?

3. 如何阅读

官方地址:

https://android.googlesource.com/

如果你的网络够给力,直接下载。

清华大学镜像地址:

https://aosp.tuna.tsinghua.edu.cn/

当然我们并不希望下载完整的源码,下载下来我也不知道怎么编译。

所以我们只下载自己需要的部分:

git clone https://aosp.tuna.tsinghua.edu.cn/platform/frameworks/base

当然github 也有地址:

https://github.com/aosp-mirror/platform_frameworks_base

也可以提供下载。

相信到这里,你肯定能下载下来一份frameworks源码!

找个称手的工具

源码下来了,如何更方便自己阅读呢?

那就需要一个称手的软件,在windows 下可以使用`source insight`。

作为 MAC 用户很忧伤。

以下内容针对 MAC 用户,windows 用户去就使用`source insight`吧。

1. sublime

sublime 也算是我非常喜欢的一个文本编辑器,当然功能非常强大,你可以给它安装个ctags 插件,然后用来查看源码。

最终效果大概是这样的:

由于大家版本都不同,如何安装自己搜索啦,关键词sublime 查看源码

2. UnderStand

最终的效果是这样的:

记得导入后等它index 完毕,快捷键什么的,自己去摸索吧。

功能非常强大,可以生成各种图。

缺点就是有点卡。

个人非常推荐替换android.jar 的方式,当然也建议大家尝试摸索下上述软件。

如果你有更好的方式,欢迎留言~

最后 wanandroid.com 也在开发在线源码阅读的能力,给大家多增加一个备选方案!

参考

https://github.com/foxleezh/AOSP/issues/1

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180718G08DV600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券