Android Code Navigation
面向 Android 项目的 VSCode 代码跳转插件,为 Java / Kotlin 源码提供类似 Android Studio 的跳转体验。适用于任意 Gradle / Android source set 布局的工程,不绑定特定仓库。
当前能力
- 点击类名跳转到定义
- 点击简单方法调用跳转到定义
- 支持工作区级符号索引
- 支持手动重建索引和清空索引
- 支持查看当前光标下的候选符号
- 支持接口类和接口方法上的实现跳转 CodeLens,点击后弹窗选择实现位置
- 支持当前类内变量使用处跳定义、变量定义处查看引用
- 支持方法和类声明处通过
N usages CodeLens 查看使用位置,也支持 Shift+F12 查找全工作区引用
- 支持 Java enum 常量在 enum 类内跳定义和查看引用
- 支持
this.xxx 和 enum 类名限定访问优先跳到类级字段/常量
- 全限定类名(
android.telephony.TelephonyManager)和显式 import 优先,避免跳到同名的其他类
- 修正
return ENUM_CONSTANT; 被误判为局部变量声明导致 enum 常量无法跳转的问题
适配范围
- 语言:Java、Kotlin
- source set:识别路径中的
src 目录段(含 DREAMER-src 这类前缀变体)以及 java / kotlin 目录段,覆盖 main、debug、release、test、androidTest、各类差异化 flavor 目录,以及老仓 module/src/com/... 的扁平布局
- 非标准源码路径可通过
dreamerNav.sourceRoots 配置补充;生成目录通过 dreamerNav.exclude 排除
工程结构
src/extension.ts:VSCode 入口,注册 provider 和命令
src/navigation.ts:索引、解析、候选排序和跳转逻辑
package.json:插件贡献点和配置
tsconfig.json:TypeScript 编译配置
开发
在工程根目录执行:
npm install
npm run compile
运行方式
- 在 VSCode 中打开这个工程
- 按
F5 启动 Extension Development Host
- 打开一个包含 Java / Kotlin 文件的 Android 工作区
- 点击类名或方法名验证跳转
配置
dreamerNav.sourceRoots
dreamerNav.exclude
dreamerNav.preferLanguageServer
dreamerNav.enableKotlinExtensionFunctions
dreamerNav.enableUsageCodeLens
安装后验证
安装新版 .vsix 后建议执行一次 Developer: Reload Window,然后运行:
Android Navigation: Show Index Status:确认已经索引到文件和符号
Android Navigation: Rebuild Index:手动重建索引
Android Navigation: Show Candidates:把光标放在类名或方法名上,查看当前 token 是否能解析到候选
说明
索引器使用轻量启发式解析,先覆盖最常见的类名和方法名跳转场景。后续可以继续增强 Kotlin 扩展函数、重载匹配和更完整的符号索引。
版本变更
0.1.23
- 修复查引用/查使用者搜不到结果的问题:0.1.18 把索引改成直接读磁盘后,引用搜索仍然只认「已打开的编辑器」,导致
IBizUserService.batchQueryBasicUserInfo 这类符号查不到调用方。现在改用 VSCode 自带的 ripgrep 搜索整个工作区。
- 方法和类声明上新增
N usages CodeLens,点击后弹窗选择使用位置,对齐 Android Studio 在声明处直接看使用者的习惯。数量只在 CodeLens 可见时才计算,结果缓存 30 秒。
- 新增配置
dreamerNav.enableUsageCodeLens,可以关掉 usages CodeLens。
- 引用结果沿用索引的过滤规则,kapt 等生成目录不会作为使用点出现。
- 已知限制:引用搜索基于符号名文本匹配,同名方法(如各类的
onCreate)会被合并统计。
0.1.22
- 修复无 receiver 的方法调用跳转出一长串候选的问题:
applyUserInfo(it) 这类裸调用现在直接跳到当前文件里的同名方法,不再把全仓同名方法都列出来。
- receiver 类型能推断出来时,只保留 owner 匹配的方法候选。
- 明确是方法调用的位置不再混入同名类候选。
- 同名类分散在多个 flavor source set(
zm / zw / zy / support-*)时,仍会列出这批同 owner 候选让用户选择。
0.1.21
- 修复老仓扁平源码布局不进索引的问题:
ycloudarch-android/sdkwrapper/src/com/yy/... 这类没有 main/java 中间层的目录现在会被索引,com.yy.mobile.bizmodel.login.LoginUtil 等类可以正常跳转。
- source set 识别放宽为「路径含
src 目录段(含 DREAMER-src 这类前缀变体)或 java / kotlin 目录段」,kapt* 等生成目录仍不索引。
0.1.20
- 修复与系统类同名时跳错的问题:点击
android.telephony.TelephonyManager 不再跳到工程内的 com.yy.mobile.audit.TelephonyManager。
- 包名限定写法(
pkg.sub.ClassName)只匹配全限定名完全一致的类,索引里没有(如 Android SDK 类)时不返回候选,而不是退化到同名的其他类。
- 当前文件显式
import 了某个同名类时,该简单名只解析到这个 import 对应的类,其他同名类不再作为候选。
0.1.19
- 支持注解类跳转:类上、方法上的注解(如
@MyAnnotation)点击可跳到注解定义。
- Java
@interface 声明、Kotlin annotation class 声明现在会被索引为注解符号并纳入类候选。
0.1.18
- 修复大仓索引时内存持续增长的问题:索引阶段和文件监听改为直接读磁盘内容解析(
workspace.fs.readFile),不再对每个文件 openTextDocument,避免把整个工作区的 Java/Kotlin 文件都塞进 VSCode 文档缓存导致内存不释放。
- 解析逻辑抽出
parseText,parseDocument 复用同一实现,行为保持不变。
0.1.17
- 文案通用化:displayName 改为
Android Code Navigation,README 与命令、配置标题去除仓库专属字样,定位为通用 Android Java/Kotlin 跳转工具。
- 命令 ID、配置键、插件 ID 保持不变,升级后已有配置无需调整。
0.1.16
- publisher 改为
allen-code,对齐 VS Code Marketplace 已注册的发布者 ID。
0.1.15
- 补齐发布到 VS Code Marketplace 所需元数据:
repository、license 字段和 LICENSE 文件。
- 消除打包时的 repository/LICENSE 警告。
0.1.14
- 新增插件图标
src/img/navigator.png,在扩展列表中展示。
0.1.13
- 索引改为严格 source set 模式:只索引落在
src/**/java 或 src/**/kotlin 结构内的源码。
src 之外的杂散 .java / .kt(如脚本、示例、临时文件)不再进入索引。
- 差异化 flavor 目录(
support-union、support-yy、support-zw、zm、zw、zy 等)仍通过通用 source root 正则被覆盖。
0.1.12
- 索引扫描不再局限于固定的
main/debug/release/test source set。
src 下任意 flavor 目录(如 support-union、support-yy、support-zw、zm、zw、zy 等)里的 java / kotlin 目录都会被识别为源码根。
- 修正排除规则按路径分段匹配,避免
out 误伤 layout、checkout 等合法源码目录。
0.1.11
Android Navigation: Show Candidates 支持接口类和接口方法的实现候选查看。
- 光标位于接口或接口方法时,候选列表优先展示实现类或实现方法;无实现候选时回退普通定义候选。
0.1.10
- 初始索引和手动重建索引时,在 VSCode 窗口底部显示索引进度。
- 进度信息包含文件查找、当前扫描文件和完成后的索引文件数。
0.1.9
- 接口类和接口方法的实现跳转 CodeLens 点击后始终弹窗选择实现位置。
- CodeLens 文案调整为
Show implementations (N implementations)。
0.1.8
- 修复
return ENUM_CONSTANT; 被误判为局部变量声明,导致 Java enum 常量无法跳转到定义的问题。
0.1.7
- 支持一行多个 Java enum 常量解析。
- 放宽 enum 常量命名限制,不再只支持全大写常量。
this.xxx 和 EnumName.xxx 优先跳到类级字段或 enum 常量。
0.1.6
- 支持 Java enum 常量在 enum 类内跳定义和查看引用。
0.1.5
- 修复类字段在方法内被引用时无法跳到字段定义的问题。
- Java 字段声明解析支持常见修饰符和注解。
0.1.4
- 支持当前类内字段、方法参数、局部变量使用处跳定义。
- 变量定义处通过 CodeLens 查看当前类内引用。
0.1.3
- 支持接口类和接口方法上的实现跳转 CodeLens。
- 点击实现入口后可选择实现类或实现方法。
0.1.2
- 修正打包版本递增规则。
- 打包时忽略历史
.vsix 文件,避免安装包递归变大。
0.1.1
- 修复安装后无法触发跳转的问题。
- 增加 Kotlin 语言贡献、索引状态命令、引用和实现跳转能力。
- 增强 Kotlin extension function 解析和 receiver 类型匹配。
0.1.0
- 初始版本。
- 支持 Java/Kotlin 类名、简单方法调用跳转、工作区符号索引和候选查看。
| |