Repository navigation
启幕 v1.3.0(改名换图标 + 安卓端可制作)
启幕 v1.3.0
这个版本做了两件事:改名换图标,以及安卓端加入制作功能。
1. 改名与图标
- 中文名从「开机动画工坊」改为 启幕(英文名保持 BootAnimForge)
- 新图标:升起的弧 + 中心一点光,弧留一个缺口 —— 对应"开机动画会在系统起来前一直循环"
图标实现是脚本生成的(node tools/make-icons.js,纯 Node 无依赖,自带超采样抗锯齿),
一次输出 Android 五个密度与 Web 端,所以两端永远一致。
2. 安卓端可以制作了
以前安卓端只能刷入现成的包;现在手机上直接选视频、出 zip、装上去。
适合"截几秒 + 改成手表分辨率 + 直接装上"这种场景;长视频与复杂分段仍然建议用 PC 端。
流程:主界面「制作开机动画」→ 选视频 → 目标分辨率(手机/手表预设或自定义)→ 帧率 → 帧命名 → 生成。
技术上的三个关键决定
| 决定 | 原因 |
|---|---|
| 自己写 PNG 编码器 | Bitmap.compress(PNG) 历史上支持不稳定、不同 ROM 行为不一致,而我没有真机可测。自己编码只用 Deflater + CRC32,Android 4.4 到最新版行为完全一致 |
| 自己写 STORE zip 写入器 | ZipOutputStream 强制 DEFLATE,而开机动画规范要求 STORE(zip -0)。且必须流式:1080p 一帧 ARGB 就 8 MB,几百帧不可能全放内存 |
| 比对尺寸来处理旋转 | 竖屏视频常以横向存储 + rotation=90,而不同 Android 版本的 getFrameAtTime 是否已应用旋转并不一致。直接按元数据算出期望显示尺寸、再比对实际拿到的尺寸,比猜版本可靠 |
依旧保持 PC 端那条铁律:绝不拉伸(等比缩放 + 居中留边)。
生成后会立刻用 BootCore(刷入前用的同一份校验代码)反过来读一遍,确认合法才提示完成。
验证情况
| 套件 | 结果 |
|---|---|
| PC 后端端到端 | 94 / 94 |
| PC 界面全流程 | 47 / 47,控制台零错误 |
| PC 动效 | 14 / 14 |
| 安卓 APK 静态 | 66 / 66 |
| 安卓包解析逻辑 | 31 / 31 |
| 安卓制作核心 | 34 / 34 |
手写的东西必须证明它是对的,所以制作核心全部在 PC 上真跑:
- 手写 PNG 编码器的产物交给 ffmpeg 当裁判逐像素核对 —— 红底、绿块、四角蓝全部对上
- 手写 STORE zip 用自己的读取器 +
BootCore双重校验(条目顺序、desc.txt、CRC) - "绝不拉伸"用像素证明:源 200×100 → 目标 100×100 时,四角必须是黑色留边、中心必须是画面内容
(为此把取帧抽象成了 FrameSource 接口,Creator/PngEncoder/ZipStoreWriter 全是纯 JDK 代码,因此不依赖真机就能测。)
⚠ 未能验证的部分
本机没有 adb、也没有真机,以下我不会假装验过:
- 真机安装与启动
MediaMetadataRetriever的实际取帧效果(尤其竖屏视频旋转方向对不对)- 制作速度与内存表现(大视频、高帧率)
- root 授权流程、写入系统分区后的权限与 SELinux 上下文
- 圆屏安全区的视觉效果(16% 缩进是算出来的,好不好看要肉眼看)
下载哪个
| 文件 | 说明 |
|---|---|
BootAnimForge-1.3.0-portable.zip |
推荐。PC 端(Node + ffmpeg,解压即用)+ 安卓端 APK |
BootAnimForge-Android-1.3.0-debug.apk |
只要安卓端 |
已知限制
- 安卓端只做单段;多段拆分、每段循环次数/暂停、视频版输出格式、Magisk 模块生成都在 PC 端
- 手机生成较慢(每秒视频约需几秒),建议先用区间截短
- 需要 root 才能刷入;没 root 只能制作与查看状态
- APK 用自动生成的调试密钥签名,正式分发请换自己的 keystore
- Android 端不申请
MANAGE_EXTERNAL_STORAGE,读写都走系统选择器与应用私有目录