当安卓学习到三五年的时候,就免不了要学习Frameworks层的代码。
这种方式是最简单的,sources的位置在Android/sdk/sources/目录中,示例图如下:
如果该目录为空,直接使用SDKManager点击下载就可以。
我们的项目中如果配置了对应版本的SDK,比如我sources中有28,29,31,32的版本,项目中如果使用的是31的版本,点击之后就会直接跳转源码。
这种方式无疑是最简单的,而且和项目极度适配,我们可以直接从我们的项目中直接跳转到源码中查看。对于排查阅读一半的FW层的问题足够了,比如查看View的渲染流程,事件分发逻辑,Activity的三大流程的执行等等是完全没问题的。
但是这种方式也有一些缺点:
比如有些代码的显示是删减过的,不是android上真正执行的代码,比如sources中WindowManagerImpl中的addView方法如下:
而实际上真正执行的代码如下:
所以代码明显是对应不上的,就影响了我们的阅读。类似的还有BaseDexClassLoader等等。
另外,sources代码中,如果涉及到native的代码,也是不包含的。比如我们看Bitamp类中,就有大量的native方法,这些方法的实现我们在sources中是看不到的。
直接访问下面的网站就可以看源码了:
是不是很方便?而且该方法访问源码还支持跳转,甚至支持native方法的跳转,而且还支持全局的搜索,十分的方便。
缺陷主要是两大块:
1.访问该网站需要翻墙。
2.网站的的方法跳转是基于文本搜索实现的,所以某些场景还是有些欠缺。
AOSP,全程就是android open source project,都说安卓是开源的,那么AOSP就是这个开源的项目。如果下载了AOSP,甚至可以自己进行编译去执行烧机的操作。怎么样,是不是很厉害。
项目地址:https://source.android.com/
点击该网站上的
就可以直接进入仓库选择了。选择了manifest就是主仓库了。
当然这个项目也需要翻墙,所以一般都是使用清华大学的镜像进行下载。
AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
首先需要翻墙。
其次AOSP其实是几百个项目的综合体,所以整个项目体积极其庞大,大约有190G左右。对电脑的存储空间是一个很大的挑战。
其实就是从AOSP的几百个项目中,找出来那最核心的一些项目来下载。
我这里列举了一下最基本的项目如下:
可以直接通过下载以下该项目进行下载,详细介绍和使用方式可以参见该项目的readme。
GitHub - September26/CoreFrameworks: optimization aosp,keep only the core library
下载的源码不要使用AS,AS的因为是未sync的状态,所以无法实现代码的跳转。
推荐使用source insight这个工具,查看源码是很方便的。
无法查看所有的源码,毕竟只是囊括了基本的一些库,还有一些库会漏掉,需要再次同步。