一款硬核安卓工具:SpineViewer,帮你在手机上直接预览 Spine 骨骼动画
做游戏美术、拆包、逆向的朋友,大概率都跟 Spine 打过交道——这是业界最主流的 2D 骨骼动画方案之一,从二次元手游到主机大作的角色动画,背后常常都是它。但麻烦的是,Spine 骨骼动画文件(.json / .skel + .atlas + 贴图)历经十几年迭代,版本从 1.6 一路演进到 4.3,不同版本之间的运行时(runtime)彼此并不兼容,想快速确认一个文件是什么版本、能不能正常播放,往往得在电脑上折腾好几个工具。
今天要介绍的 SpineViewer,就是为了解决这个痛点而生的一款 Android 原生工具:一个能在手机上直接浏览文件夹、自动识别版本、并实时预览动画的 Spine 骨骼文件查看器。
项目地址:https://github.com/sanwinddd/SpineViewer
这是个什么样的工具?
简单说,SpineViewer 就是安卓上的"Spine 文件资源管理器 + 播放器"。你不需要 root,不需要连电脑,只要在手机里选中一个装有 .json/.skel 骨骼文件的文件夹,它就会自动扫描、配对贴图与图集,列成卡片供你逐一点开预览。
核心功能包括:
- 文件夹浏览:基于 Android SAF(Storage Access Framework)实现,免 root
- 版本自动识别:通过读取
.json/.skel 文件头,自动判断 Spine 版本(覆盖 1.6 → 4.3 共 14 个版本) - 手动切换运行时:遇到自动识别失效的老版本文件(比如 Spine 1.6/1.7 文件头里根本没存版本号),可以手动指定运行时
- 交互式预览
- 动画切换
- 换装换皮肤:支持 skin 切换,部分运行时下还支持多 skin 组合
- 播放速度调节
- 骨骼调试视图:一键开启骨骼(bone)叠加显示,方便排查动画结构
- 容错重试:如果某个版本加载失败(版本选错、缺 atlas、老运行时不支持某种二进制格式等),会提示你换个版本重试,而不是直接崩溃
最硬核的部分:14 个版本的运行时全部内置
Spine 从 1.6 到 4.3,官方运行时之间的 API 差异其实相当大——2.1 和 3.1 这两个版本甚至只支持 JSON 格式,没有 SkeletonBinary 实现;4.2 引入了物理约束(Skeleton.Physics);到了 4.3,连基础的 pose API 命名都变了(setupPose → setupPoseSlots)。
SpineViewer 的做法是:把这 14 个版本的运行时源码原样打包进项目里,每个版本对应一个独立的 Engine 类,再用一个工厂类根据检测到的版本自动选择合适的运行时加载。也就是说,不管你手上的文件是十年前老游戏的 1.6 版素材,还是最新 4.3 版角色动画,理论上都能在同一个 App 里找到对应的解析引擎。
版本支持一览:
怎么用?
- 点击 +,选择一个存有
.json 或 .skel 文件的文件夹 - App 自动扫描并把骨骼文件与对应的
.atlas 配对
需要注意的是,一个完整的骨骼动画通常由三个文件组成:
my_animation/├── skeleton.json (或 skeleton.skel)├── skeleton.atlas└── skeleton.png (atlas 引用的贴图)
三者需要放在同一目录下,App 才能正确配对加载。
技术栈速览
对开发者朋友,附上一些技术细节:
- 构建工具:Gradle 8.13 + AGP 8.7.3
- 最低支持:Android 7.0(SDK 24),目标 SDK 35
- 需要 JDK 17 + Android Studio 编译
项目结构上,spine/engines/ 目录下每个版本对应一个 SpineEngineXX.java,spine/runtime/ 则存放各版本原始运行时源码,层次清晰,后续如果 Spine 出新版本,理论上只需要照葫芦画瓢再加一个 Engine 类即可扩展。
写在最后
对于经常要处理游戏资源、拆包分析、或者单纯想在手机上快速确认一个 Spine 文件能不能用的朋友来说,SpineViewer 省去了"开电脑、装环境、找对应版本工具"这一整套流程,一部手机就能搞定版本识别 + 实时预览。目前项目仍在持续打磨中,欢迎感兴趣的朋友去 GitHub 上点个 star、试用或提 issue:
👉 https://github.com/sanwinddd/SpineViewer