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


highlight: androidstudio

theme: cyanosis

1. 前言

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

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

源码阅读小技巧 | AndroidStudio 类型篇_第1张图片


1. 类型层次关系 Type Hierarchy

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

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

源码阅读小技巧 | AndroidStudio 类型篇_第2张图片

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

源码阅读小技巧 | AndroidStudio 类型篇_第3张图片

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


2. 方法层次关系:Method Hierarchy

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

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

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

源码阅读小技巧 | AndroidStudio 类型篇_第4张图片

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

源码阅读小技巧 | AndroidStudio 类型篇_第5张图片

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


3. 方法调用关系:Call Hierarchy

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

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

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

源码阅读小技巧 | AndroidStudio 类型篇_第6张图片


4. 类型结构:Structure

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

源码阅读小技巧 | AndroidStudio 类型篇_第7张图片

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

  • 类型图标

|普通类 | 抽象类/mixin | 枚举 | typedef | | --- | --- |--- |--- | |image.png | image.png | image.png |image.png

  • 字段(成员)图标

| 普通成员 | final 不可变成员 | static 静态成员 |static 常量成员 | | --- | --- |--- |--- | | image.png | image.png | image.png | image.png

  • 方法图标

| 普通方法 | 抽象方法 | get 方法 | set 方法 | | --- | --- |--- |--- | | image.png | image.png | image.png|image.png


5. 快捷查看的浮窗

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

源码阅读小技巧 | AndroidStudio 类型篇_第8张图片


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

源码阅读小技巧 | AndroidStudio 类型篇_第9张图片


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

源码阅读小技巧 | AndroidStudio 类型篇_第10张图片


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

源码阅读小技巧 | AndroidStudio 类型篇_第11张图片

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

源码阅读小技巧 | AndroidStudio 类型篇_第12张图片


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

你可能感兴趣的:(源码阅读小技巧 | AndroidStudio 类型篇)