grepcode都无法访问了,如何更好的阅读源码
有一次当我打开grepcode 的时候,显示了503,我以为只是短期的服务器错误,没想到持续到现在了...
相同的体验还有
其实还有些大大小小的站也关闭了,很忧伤...
好了,回到主题,本篇主要讲如何阅读 Android framework 层的源码。
看下 Android 的整体架构:
关注本号的大多数同学都是做应用层的,所以对我们来说一般只要看到Framework 的源码:
比如:AMS,WMS,PMS 等...包括上周推送的 AccessibilityService 源码,以及 Activity 生命周期是如何回调的,都涉及到该类知识。
本篇文章不讨论,能够下载整个几十G的源码,修改编译后,导入到 AS的方式,成本比较高,可以自行搜索。
在线查看,这个方式一般适合有针对性的查看某个类:
网站1
http://androidxref.com/
你可以查看各个版本的源码。
给大家录制个gif:
当然你也可以点击下面的path,然后查看整个源码树。
网站2
https://www.androidos.net.cn/sourcecode
也比较方便,还是录个gif 吧:
以上两个网站都可以在 http://www.wanandroid.com/navi#393 上找到入口。
在线查看一般都是比较精确要看哪个类的时候,并不能满足我们日常快速查看的需求。
例如我忽然想看下 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 中来放肆的查看源码了:
偶尔会有一两个类找不到,那么你就可以配合在线查看的方式去看了。
当然了,自己下载源码来查看肯定是最靠谱的方式,但是自己下载有两个问题。
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
推荐阅读:
扫一扫 关注我的公众号
如果你想要跟大家分享你的文章,欢迎投稿~
┏(^0^)┛明天见!