阅读android中frameworks层代码的几种方式

前言:

当安卓学习到三五年的时候,就免不了要学习Frameworks层的代码。

一.直接查看sources中的源码

sources的方案:

使用流程:

这种方式是最简单的,sources的位置在Android/sdk/sources/目录中,示例图如下:

如果该目录为空,直接使用SDKManager点击下载就可以。

 我们的项目中如果配置了对应版本的SDK,比如我sources中有28,29,31,32的版本,项目中如果使用的是31的版本,点击之后就会直接跳转源码。

优势: 

这种方式无疑是最简单的,而且和项目极度适配,我们可以直接从我们的项目中直接跳转到源码中查看。对于排查阅读一半的FW层的问题足够了,比如查看View的渲染流程,事件分发逻辑,Activity的三大流程的执行等等是完全没问题的。

缺点:

缺点1

但是这种方式也有一些缺点:

比如有些代码的显示是删减过的,不是android上真正执行的代码,比如sources中WindowManagerImpl中的addView方法如下:

 而实际上真正执行的代码如下:

 所以代码明显是对应不上的,就影响了我们的阅读。类似的还有BaseDexClassLoader等等。

缺点2

另外,sources代码中,如果涉及到native的代码,也是不包含的。比如我们看Bitamp类中,就有大量的native方法,这些方法的实现我们在sources中是看不到的。

二.在线网站阅读

使用方式

直接访问下面的网站就可以看源码了:

https://cs.android.com/

是不是很方便?而且该方法访问源码还支持跳转,甚至支持native方法的跳转,而且还支持全局的搜索,十分的方便。

缺点:

缺陷主要是两大块:

1.访问该网站需要翻墙。

2.网站的的方法跳转是基于文本搜索实现的,所以某些场景还是有些欠缺。

三.下载AOSP

使用方式:

AOSP,全程就是android open source project,都说安卓是开源的,那么AOSP就是这个开源的项目。如果下载了AOSP,甚至可以自己进行编译去执行烧机的操作。怎么样,是不是很厉害。

项目地址:https://source.android.com/

点击该网站上的

就可以直接进入仓库选择了。选择了manifest就是主仓库了。

当然这个项目也需要翻墙,所以一般都是使用清华大学的镜像进行下载。

AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

缺点:

首先需要翻墙。

其次AOSP其实是几百个项目的综合体,所以整个项目体积极其庞大,大约有190G左右。对电脑的存储空间是一个很大的挑战。

四.下载AOSP核心库

使用方式:

其实就是从AOSP的几百个项目中,找出来那最核心的一些项目来下载。

我这里列举了一下最基本的项目如下:

  • frameworks/base:app的核心库,APP进程中使用到的所有java类和native类,SystemServer进程(AMS,WMS就属于这个进程)中使用到的所有java类和native类,以及SurfaceFlinger进程中用到的java类,都在这个项目中。
  • frameworks/native:SurfaceFlinger进程中用到的native类,底层服务(诸如蓝牙,电源管理,USB连接等等)的native实现类,都在这个项目中。
  • frameworks/multidex:顾名思义,主要是关于multidex的类。
  • libcore:主要包含DexClassLoader等ClassLoader类,JSON类,VMRuntime类等等。
  • art:ART虚拟机的实现,odex的优化实现等等。
  • system/core:主要是安卓第一个进程:init进程相关的内容。

可以直接通过下载以下该项目进行下载,详细介绍和使用方式可以参见该项目的readme。

GitHub - September26/CoreFrameworks: optimization aosp,keep only the core library

下载的源码不要使用AS,AS的因为是未sync的状态,所以无法实现代码的跳转。

推荐使用source insight这个工具,查看源码是很方便的。

缺点:

无法查看所有的源码,毕竟只是囊括了基本的一些库,还有一些库会漏掉,需要再次同步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失落夏天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值