Android使用MCP把Kotlin扩展迁移至ViewBinding
前言
kotlinx.android.synthetic 已在 Kotlin 1.8+ 彻底移除,老项目必须迁移到 ViewBinding。
手动改几百个 Activity / Fragment 成本很高,且容易漏掉 include、代码里 inflate 的子布局、SeekBar.max 等细节。
本文记录我在项目中实际使用的 MCP Server + Cursor Rule 配置,让 AI 按统一规范批量完成迁移。
MCP 包地址:z-mcp-vb-migration - npm
整体思路
1 | Cursor Agent |
- MCP 负责机械替换:删 synthetic import、改基类、替换控件引用、补 include 的
android:id - Rule 负责 MCP 覆盖不到的项目特有坑(如 BRVAH 的
adapter?.data = list)
MCP 配置
在项目根目录创建 .cursor/mcp.json:
1 | { |
说明:
| 参数 | 含义 |
|---|---|
npx -y z-mcp-vb-migration |
免安装拉取 npm 包,当前版本 1.0.3 |
--stdio |
以 MCP 标准输入输出模式运行(Cursor 必需) |
--android-module=app |
指定 Android 模块名,扫描 app/src/main 下的 Kotlin 与 layout |
配置好后,在 Cursor Settings → MCP 中确认 z-mcp-vb-migration 状态为绿色(ready),Agent 即可调用其工具。
Cursor Rule 配置
MCP 做完主布局替换后,还需处理项目特有的 Adapter 写法。在 .cursor/rules/vb-migration.mdc 中补充:
1 | --- |
Rule 要点:
globs: app/src/main/java/**/*.kt:只在编辑 Kotlin 源码时生效alwaysApply: false:按需触发,不污染无关对话- 解决 MCP 自动替换后常见的
adapter?.data = mDatas编译错误
迁移工作流
在 Cursor Agent 中按以下步骤操作:
1. 扫描待迁移文件
1 | 请调用 vb_list_kt_files,列出所有仍使用 synthetic 的 Kotlin 文件 |
2. 逐文件迁移
1 | 请用 vb_migrate_kt_file 迁移 xxx/yyy/SomeActivity.kt,并根据 preview 核对后写盘 |
建议按模块分批(如先 kongjian、再 jiaoyan),每批 5~10 个文件。
3. 人工处理标记项
MCP 不会自动迁移的场景,需按 ViewBinding 迁移注意项 手动处理:
hasCodeLayouts: true:代码里inflate(R.layout.item_xxx)的子布局,改用ItemXxxBindingprimaryLayoutCount > 1:多个主布局 import,确认保留哪一个- 同名 id 与局部变量(如
list既是 RecyclerView 又是MutableList) SeekBar.max/ProgressBar.max属性赋值
4. Rule 补充检查
迁移写盘后,Agent 按 vb-migration.mdc 检查:
1 | # 搜索残留问题 |
5. 批量编译验证
1 | ./gradlew :app:compileGuanchengDebugKotlin |
全部迁完且编译通过后,再在 build.gradle 中移除 kotlin-android-extensions 插件。
迁移效果示例
以 KjMp3Activity 为例,迁移前:
1 | import kotlinx.android.synthetic.main.activity_kjmp3.* |
迁移后:
1 | import com.xhkjedu.schoolteacher.databinding.ActivityKjmp3Binding |
目录结构一览
1 | schoolteacherandroid/ |
注意事项
- 先开启 ViewBinding:
build.gradle中buildFeatures { viewBinding true },并准备好BaseMvpActivityVB等基类(见 ViewBinding 基类封装) - MCP 迁主布局,人迁子布局:列表 item、弹窗、ViewPager 页等代码 inflate 的布局,MCP 只标记不自动改
- Rule 补业务坑:BRVAH Adapter、项目自定义写法等,靠 Rule 约束 Agent 迁移后自检
- 不要逐文件全量构建:按 MCP 返回的
workflowHints,批量迁完再compileDebugKotlin