== 布局 ↔ Java id 交叉校验 ==
   布局文件 1 个 / 定义的 id 16 个 / Java 引用 id 16 个
   res drawable 8 个 / Java 引用 drawable 2 个

[1] Java 引用但布局里没有的 id：
   ✘ logscroll           被引用: app\src\main\java\com\rev\mcptool\MainActivity.java

[2] Java 引用但不存在的布局 / drawable：
   ✔ 全部存在（1 个布局 / 2 个 drawable 引用）

[3] 桌面编译桩 tools/rstub/.../R.java 与 res/ 同步：
   ✘ 桩里缺 id logscroll_x
   → 修法: python tools/gen_rstub.py
   ⚠ 桩里多出源里已无的 id（不影响编译，可跑 gen_rstub.py 清掉）：logscroll

[4] 布局里有、Java 未引用的 id（提示，不算失败）：
   logscroll_x

[5] 界面结构约束（只有日志可滚动）：
   ✘ 滚动区的 id 是 logscroll_x，期望 logscroll
     日志滚动区必须叫 logscroll（MainActivity 靠它自动滚到底）。

== 校验失败 ==
   - R.id.logscroll 在布局里不存在（app\src\main\java\com\rev\mcptool\MainActivity.java）
   - 桌面编译桩落后于 res/（缺 logscroll_x）
   - 主布局的滚动区 id 不是 logscroll（logscroll_x）
   这些都是「编译期不报错、装上手机才出问题」的类型（闪退 / 少个功能 / 资源名写错）—— 先补齐再打包。
