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

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

相关推荐
氤氲息2 分钟前
Android 底部tab,使用recycleview实现
android
Clockwiseee31 分钟前
PHP之伪协议
android·开发语言·php
小林爱37 分钟前
【Compose multiplatform教程08】【组件】Text组件
android·java·前端·ui·前端框架·kotlin·android studio
小何开发2 小时前
Android Studio 安装教程
android·ide·android studio
开发者阿伟2 小时前
Android Jetpack LiveData源码解析
android·android jetpack
weixin_438150992 小时前
广州大彩串口屏安卓/linux触摸屏四路CVBS输入实现同时显示!
android·单片机
CheungChunChiu3 小时前
Android10 rk3399 以太网接入流程分析
android·framework·以太网·eth·net·netd
木头没有瓜3 小时前
ruoyi 请求参数类型不匹配,参数[giftId]要求类型为:‘java.lang.Long‘,但输入值为:‘orderGiftUnionList
android·java·okhttp
键盘侠0073 小时前
springboot 上传图片 转存成webp
android·spring boot·okhttp
江上清风山间明月4 小时前
flutter bottomSheet 控件详解
android·flutter·底部导航·bottomsheet