Files
Spine_lab/viewpanel/build.sh
T
tianmo 8df990a058 把 New 15 Bone+Slot+Att 按钮移植进面板源码(重启后仍在)
- 新类 com.spineview.NewFifteen:按钮 → 编辑器自带名称面板(xl + ASM 子类拿名字) → 按名字匹配附件
  → 当前选中骨骼下建 15 根骨骼,每根 1 插槽 1 附件(该名字的副本)
  骨骼 x/y 0~500 随机、rotation/scale/shear=0/1/0;插槽 alpha 0.5~1、blend normal/additive 随机;
  附件 x/y/rotation=0、scaleX/scaleY=1(并替换掉 ADD_SLOT 带过来的模板附件)
  弹窗按 pref 尺寸(>=360x170)撑开、同一次渲染回调里居中
- ObjectPanel.build 里挂一行按钮(复用 ObjectPanel.wire 的点击轮询)
- build.sh 的 javac 加 -cp ../tools/asm/asm.jar(NewFifteen 现场生成 xl 子类需要 ASM)
依据:tools/deobf/anchors.tsv + 混淆名对照表.md(全部字节码/实测确认)
2026-10-17 10:25:22 +08:00

49 lines
1.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/zsh
# 编译 ViewPanel:注入器(C,无 UI 依赖)+ 面板(纯 Java / Scene2D 反射)
set -e
HERE="$(cd "$(dirname "$0")" && pwd)"
cd "$HERE"
# 找一个 JDK(编辑器运行时是 OpenJDK;本机现成的是 /tmp 下的 Temurin 17)
if [[ -z "$JAVA_HOME" ]]; then
for candidate in /tmp/jdk-17.0.20.1+1/Contents/Home /tmp/jdk*/Contents/Home; do
[[ -x "$candidate/bin/javac" ]] && JAVA_HOME="$candidate" && break
done
fi
if [[ -z "$JAVA_HOME" || ! -x "$JAVA_HOME/bin/javac" ]]; then
echo "找不到 JDK:请设置 JAVA_HOME" >&2
exit 1
fi
mkdir -p build/classes
echo "== 编译 Java 侧(javac $("$JAVA_HOME/bin/javac" -version 2>&1))"
find src -name '*.class' -delete 2>/dev/null || true
# 面板里有一处用了 ASM(NewFifteen 现场生成编辑器对话框子类),编译期也要能看到 asm.jar
"$JAVA_HOME/bin/javac" --release 8 -encoding UTF-8 -cp "../tools/asm/asm.jar" \
-d build/classes $(find src -name '*.java')
# 保名类清单:这套运行时把 libGDX 基类混淆了,但 ui/* 和 editor/* 保名。
# 旧版本的明文载荷里能直接列出这些类名,用它们做静态字段扫描的候选。
UPDATES="$HOME/Library/Application Support/Spine/updates"
if [[ -f "$UPDATES/3.8.99" ]]; then
unzip -l "$UPDATES/3.8.99" 2>/dev/null \
| awk '{print $4}' | grep -E '\.class$' | grep -E '^(com|org)/' \
| sed 's#/#.#g; s#\.class$##' | sort -u > build/kept-classes.txt
echo "保名类清单: $(wc -l < build/kept-classes.txt) 个"
fi
echo "== 编译注入器"
# 编译成通用二进制:3.8.99 的编辑器是 x86_64 的 Spine_x86(Rosetta),
# 只带 arm64 的 dylib 被继承到那个进程会直接 dyld 报错。
clang -dynamiclib -O2 -Wall -Wextra -Wno-unused-parameter \
-arch arm64 -arch x86_64 \
-I"$JAVA_HOME/include" -I"$JAVA_HOME/include/darwin" \
-o build/inject.dylib \
native/inject.c
echo "== 产物"
ls -la build/inject.dylib
find build/classes -name '*.class' | sed 's/^/ /'