源码阅读小技巧 | AndroidStudio 类型篇

2023-10-19 18:54:09 浏览数 (2)

1. 前言

鉴于很多朋友在阅读小册,对研究源码时 AndroidStudio 如何调出相关面板有所疑惑,这里就专门写篇文章来介绍一下 AndroidStudio 阅读源码的小技巧。阅读源码的小技巧不单单是看底层源码,应用层的源码也依然适用,比如你接手了一个项目,也需要去阅读源码。

由于不同平台或者个人的快捷键不同,所以这里不以快捷键为主,而是让大家知道对应的菜单是什么。快捷键可以自己修改,但菜单栏不会变动。另外,菜单栏中一般也会有对应的快捷键,大家自行查看即可。比如下面的查询类型在 Navigate/Class..., 在我的 AndroidStudio 里对应的快捷键是 Ctrl N :


1. 类型层次关系 Type Hierarchy

菜单位置 : Navigate/Type Hierarchy 激活条件 : 光标停留在类名上,或停留在类的区域内

AndroidStudio 的菜单有些需要激活条件,下图中圆圈标记了三个位置,示意鼠标的光标。其中 1 点在类型定义之外,此时 Type Hierarchy 菜单就不会激活。

在 2 点时鼠标光标在 Widget 名称上,菜单会激活,点击菜单项会弹出 Hierarchy 面板,会展示 Widget 类在源码中的类型层次关系。这样你就可以很方便地看到它的父类以及所有的子类型,对整体的继承结构有一个宏观的认知。另外,面板中的每个条目都可以通过双击跳转到对应的源码位置。

在类型源码中的任意其他位置,点击菜单,会展示当前类在源码中的类型层次关系。比如上面的 3 点, Hierarchy 面板展示的是 StatefulWidget 的层次关系。


2. 方法层次关系:Method Hierarchy

菜单位置 : Navigate/Method Hierarchy 激活条件 : 光标停留在方法名上

在阅读源码中,方法的继承关系也是一个非常重要的信息。在一个类型的派生过程中,子类可以复写父类的方法来拓展自己额外的功能。但你一般很难确定,哪个子类型沿用了父类方法处理,哪个子类型有自己的定制化逻辑。

Method Hierarchy 就可以轻松地让你了解该方法在继承体系中的表现。如下是 Route#install 方法的层次关系,双击类名条目可以进入对应的类型中。

大家也许注意到了,类名前有 加号 或者 减号。其中比如 TransitionRoute 左侧有加号,说明 install 方法在该类中进行了复写。进入之后会发现 TransitionRoute#install 方法中,额外实现了动画控制器的创建和状态监听的逻辑,也就是路由跳转过程中动画驱动力的根源。

另外,类名前的 减号 表示该类没有复写父类的该方法,这样在研究 install 方法在源码中的作用时,带减号的类型就可以忽略了。


3. 方法调用关系:Call Hierarchy

菜单位置 : Navigate/Call Hierarchy 激活条件 : 光标停留在方法名上

有时候我们期望知道方法是在哪里被调用的,这时通过调用层次来查看。比如对于 Route#install 方法,右侧面板中第一层是该方法的调用者,一共有五处,双击条目就可以跳转到对应的方法中。

另外条目可以进行展开,来查看调用的上一层级。比如下面的第一条展开的内容,就可以看到源码中哪些地方调用了 _RouteEntry.handlePush,以此类推。


4. 类型结构:Structure

类型结构在源码分析中是一个非常重要面板,它可以让你迅速查看一个类的信息,类的构造、成员、方法都能一目了然,从而对整体有个认知。

其中条目的左侧图标有一些小细节,下面统一整理介绍一下。对应 Flutter 而言:

  • 类型图标

普通类

抽象类/mixin

枚举

typedef

  • 字段(成员)图标

普通成员

final 不可变成员

static 静态成员

static 常成员

  • 方法图标

普通方法

抽象方法

get 方法

set 方法


5. 快捷查看的浮窗

另外关于类型有些操作的方式,可以弹出浮窗,可以更便捷的查看一些信息:


Navigate/Implementations 可以弹出浮窗,从而可以看到方法在子类中的实现情况:除了快捷键,Windows 中可以通过 Ctrl Alt 鼠标单击弹出:


Navigate/Declaration or Usages 可以弹出浮窗,从而可以看到方法在的调用情况:除了快捷键,Windows 中可以通过 Ctrl 鼠标单击弹出:


Navigate/File Strcture 可以弹出当前文件中类型的结构,相当于浮窗版的 Structure 。

Navigate/File Path 可以弹出当前文件在计算机的磁盘位置,点击条目可以进入对应的文件夹中:

这就是在阅读源码时,AndroidStudio 编辑器可以给我们的一些类型相关的辅助。希望这些可以在你阅读源码的过程中,可以对你有所帮助。处理类型以外,源码阅读过程中也有其他方面的小技巧,在后面的文章再来介绍。那感谢观看,下次再见 ~

0 人点赞