阶段四收尾:面板两行布局(row/expand/fill)+ 英文输出 + 混淆名对照表

- ViewInstaller:用 Table.row()/Cell.expand()+fill()/setFillParent 排出"
  按钮一行、可滚动文字区一行"的面板;修掉把 setDebug 当成 setFillParent 的误用
- Scene2dPanel:按钮 isChecked/setChecked 与 Label.setText 改用对照表定名,
  修掉"点一次反复触发"与"文字不刷新"两个 bug
- SceneReader:面板输出改英文(编辑器缺中文字形,中文会渲染成方块)
- 新增 tools/obfmap/MapMethods.java:载荷 vs 上游 libGDX 的字节码指纹比对工具
- 新增 混淆名对照表.md:类/方法/字段映射、推导办法、已踩的坑、验证状态
This commit is contained in:
tianmo committed 2026-10-16 14:06:42 +08:00
1 parent 2e7ab7c33c
commit 8f7b72271f
8 files changed
+677 -52

No files matched your search

+42
View File
@@ -225,3 +225,45 @@ PAY="spine-lab/home/Library/Application Support/Spine/updates/3.8.99.orig"
1. 面板内容目前是空的(Table 单元格布局在停靠框里的尺寸还要调)。
2. `SceneReader` 现在读的是 UI 对象树,要换成真正的**骨骼 / 插槽 / 附件**数据。
3. 布局稳定后,再考虑按 4.2.43 复刻(4.x 是加密载荷,这套注入通道不一定通用)。
---
## 七、面板内容与布局(本轮补齐)
上面的"下一步 1"已经做完了,而且顺带把两个会让人误判的坑挖了出来。
### 1. 布局:按钮一行、可滚动文字区一行
面板内容就是一个 `Table`:第一行放 `TextButton`(靠左),第二行放 `ScrollPane(Label)`(撑满)。
关键调用(混淆名出处见 [`混淆名对照表.md`](混淆名对照表.md)):
| 目的 | 调用 | 载荷里的名字 |
| --- | --- | --- |
| 面板铺满停靠框 | `Table.setFillParent(true)` | `et.Z(Z)V` |
| 加控件 | `Table.add(Actor)` | `et.D(Ldl;)LdR;` |
| **换行** | `Table.row()` | `et.I()LdR;` —— 不调它按钮和文字就并排挤在一行 |
| 单元格靠左 | `Cell.left()` | `dR.C()LdR;` |
| 单元格占满剩余空间 | `Cell.expand()` + `Cell.fill()` | `dR.StackMapTable()` + `dR.D()` |
> 坑:`Table` 上还有 `et.B(Z)V` = `setDebug(boolean)`,名字同样是单字母,
> 之前误当成 `setFillParent` 调过 —— 现象是单元格被描上彩色边框,布局没变。
### 2. 两个"看名字挑方法"踩出来的 bug
| 症状 | 真因 | 修法 |
| --- | --- | --- |
| 点一次按钮被**反复触发**(日志刷屏) | 运行期自校准扫到了**继承链上无关的方法**,配出一对假的 setChecked/isChecked | 用对照表定名 `Button.String()`=isChecked、`I(Z)`=setChecked;自校准只作兜底 |
| 日志说"读取完成 N 字符",**面板文字却一直不刷新** | `Label` 上有 `D(CharSequence)V`(=setText) 和 `D(CharSequence)Z`(=textEquals),按"1 个 CharSequence 参数"找会挑中后者 | 连返回类型一起判:`D(CharSequence)` 且返回 void |
### 3. 面板文字全部用英文
编辑器这套运行时只装了 NotoSans 拉丁字形,中文会渲染成一排小方块(tofu)。
所以 `SceneReader` 的输出改成英文(`=== Scene actors ===` / `=== Objects reachable from Editor ===` 等)。
### 4. 现在的状态
点按钮 → `SceneReader` 读一遍 → 文字区刷新(可滚动查看)。截图确认:按钮靠左上,
文字区撑满并出现滚动条,内容全是英文。
还差的:`SceneReader` 读的还是 **UI 对象树 / 编辑器可达对象**,要换成真正的
**骨骼 / 插槽 / 附件**(这才是"给对象配粒子发射行为"的输入)。