感谢你愿意参与 格式工厂 · Format Factory (Android)。
main:只存放已验证通过的代码dev:所有日常开发都在这里进行- 合并到
main前必须通过:flutter analyze、flutter test、flutter build apk --release --split-per-abi(涉及原生解密改动另需android/gradlew :app:testDebugUnitTest)
- Flutter stable(本仓库要求 Dart ≥3.13)
- Android SDK(minSdk 24)
- 常用命令:
flutter pub get flutter analyze flutter test flutter build apk --release --split-per-abi
lib/
├── models.dart 领域模型(任务/设置/媒体信息)
├── formats.dart 格式预设结构与参数翻译助手
├── formats_data.dart 汇总入口
├── formats_video_data.dart 视频格式清单(想加视频格式改这里)
├── formats_audio_data.dart 音频格式清单
├── formats_image_data.dart 图片格式清单
├── services/ FFmpeg 引擎、FFprobe、输出目录、解锁通道、B站缓存解析、前台通知
├── state/ Riverpod:任务队列 / 设置 / 历史
└── ui/ 首页 / 转换 / 音乐脱壳 / B站缓存 / 任务 / 历史 / 设置 / 文件浏览器
android/app/src/main/kotlin/.../unlock/ 脱壳算法(Ncm/Qmc/Kgm,纯 Kotlin)
android/app/src/test/.../unlock/ JVM 单元测试(含真实 .ncm 样本与往返样本)
- 转码格式:改
lib/formats_*_data.dart——复制一条FormatPreset改三处:name/extension(显示名与扩展名)、fields(设置页参数下拉框)、buildArgs(FFmpeg 参数,均有中文注释) - 脱壳格式:Android
com.starksky16.formatfactory.unlock.*,照 Ncm/Qmc/Kgm 的实现 + JVM 单元测试
改 lib/theme.dart 里的 seedColor 一个值,整套 Material 3 配色自动生成。
建议遵循 type(scope): 描述(如 feat(unlock-QMC): … / fix(browser): …)。
- 递增
pubspec.yaml的version: X.Y.Z+N(+N是 versionCode,每次发版必须递增) - 提交到
dev→ 合并到main(main只放已验证代码) - 打 annotated tag 并推送:
git tag -a vX.Y.Z -m "<本次更新说明>" && git push origin vX.Y.Z——CI 会自动构建 3 个 split APK 并创建 Release,tag 注释会成为 Release 正文里的「本次更新」(写多行用git tag -a vX.Y.Z -F <说明文件>;若用 lightweight taggit tag vX.Y.Z,正文里就只有安装说明) - 正式签名:CI 由仓库 secrets 提供(
ANDROID_KEYSTORE_BASE64/ANDROID_KEYSTORE_PASSWORD/ANDROID_KEY_PASSWORD/ANDROID_KEY_ALIAS); 本地构建读取android/key.properties(已 gitignore,不进版本库),文件不存在时自动退回 debug 签名
本项目绝大多数代码由 AI 生成,作者负责保证其行为与功能测试正常;请同样以"可验证、可测试"为标准提交改动。