4223b0cd19359d338252ed6c24fa655264d5e6cc
- /api/update-check 走 git.fragrance.moe 的 Release API(公开仓库,无需 token) - 设置页加「检查更新 / 下载安装」,下载走 assets 的 browser_download_url - asset.rev 由打包脚本生成,覆盖安装必定重建资源
maipulse
舞萌 DX 国服(SDGB)的本地发包台。Flask + 单页前端,安卓壳用 Chaquopy 把 Python 打进 APK。
这个仓库是脱敏存档:所有机台身份(标题服务器地址、AES 密钥与 IV、混淆盐)和店铺信息都已经抹掉, 字段留空,运行时从配置文件读。想用的话自己填——见下面的「配置」。
目录
maipulse/ Python 后端 + 前端单页
app.py Flask 入口,所有 HTTP 接口
core/ 业务模块(session / b50 / unlock / items / settle ...)
html/index.html 整个界面(CSS/JS 全内联)
data/master/ 曲库与道具索引(公开数据)
tools/ 打包、更新合并、脱敏脚本
astral/ SDGB 协议实现(脱敏副本,config.py 需要自己生成)
android/ Android 壳工程(Gradle + MainActivity)
配置
astral/config.py 和 astral/api/MaimaiNet.py 里的关键字段全部为空:
| 字段 | 说明 |
|---|---|
CLIENT_ID |
11 位机台 ID |
PLACE_ID / REGION_ID |
店铺 / 区域 ID |
PLACE_NAME |
店铺名,只用于界面显示 |
BASE_URL |
标题服务器地址 |
AES_KEY / AES_IV |
32 / 16 字节 |
OBFUSCATE_PARAM |
8 位混淆盐 |
填完在设置页点「导入配置」加载 JSON,或者直接改这两个文件后重启。
跑起来
python app.py # http://127.0.0.1:8787
依赖:flask、requests、pycryptodome。
打包 APK
powershell -NoProfile -ExecutionPolicy Bypass -File maipulse\tools\build_apk.ps1
脚本会:清空旧产物 → 同步资源 → 脱敏 → 编译 → zipalign -P 16(16KB 页对齐,Android 15+ 要求)→
重签 → 放到桌面。
需要自己准备一个 debug keystore 放在 android/ 下,并在 android/app/build.gradle 里改路径。
keystore 不进仓库,它带着私钥。
数据更新
官方更新包(SDGB_A0xx_*)到手后:
python maipulse/tools/apply_update.py "路径/包目录" --dry # 先看差异
python maipulse/tools/apply_update.py "路径/包目录" # 真正写入
只做增量合并,写盘前自动备份到 data/_backup/。
脱敏说明
maipulse/tools/blank_secrets.py 是打包时自动跑的那一步:从主仓读出真实值,
在副本里全部替换成占位符,然后自己复核一遍,有残留就 return 2 让打包失败。
这个仓库里跑过同样的流程,30 处替换,复核无残留。