From 914450bc6eae2de6f14397ad3ba8acec4e7e383d Mon Sep 17 00:00:00 2001 From: zijunchiang Date: Sat, 12 Sep 2026 17:47:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=20V1.3.0:=20=E5=85=B3?= =?UTF-8?q?=E4=BA=8E=E7=95=8C=E9=9D=A2=E6=A0=87=E6=B3=A8=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=E6=9D=A5=E6=BA=90,=20=E6=B8=85=E7=90=86=E6=97=A7=E6=97=A5?= =?UTF-8?q?=E5=BF=97=20TLS=20=E8=AF=81=E4=B9=A6,=20=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E8=84=B1=E6=95=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除 app/src/main/res/raw/mili_log.crt(旧 syslog/TLS 上报遗留, 已无引用) - 关于界面(弹窗+设置页)补充: 框架来源 杨家三郎/麦动KTV, 内核 由 DSH 重构数据库源 - app/build.gradle: versionCode 6 / versionName 1.3.0 - 文档: 远程日志域名脱敏(仅指向 MiliLog.ENDPOINT), 同步 KTV_BRIDGE_API: 8 与版本号 --- AGENTS.md | 7 +++-- README.md | 8 ++--- app/build.gradle | 4 +-- .../main/java/com/local/ktv/MainActivity.kt | 5 ++- app/src/main/res/raw/mili_log.crt | 31 ------------------- 5 files changed, 14 insertions(+), 41 deletions(-) delete mode 100644 app/src/main/res/raw/mili_log.crt diff --git a/AGENTS.md b/AGENTS.md index 615b3a4..e99c604 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -88,7 +88,7 @@ $BT/apksigner verify 目标名.apk ### 版本号 -- `app/build.gradle`:`versionName "1.2.5"` / `versionCode 5` +- `app/build.gradle`:`versionName "1.3.0"` / `versionCode 6` - App 内显示统一用纯版本号(不加 `(versionCode)` 括号) ## 三、关键实现约束(避免踩坑) @@ -98,9 +98,10 @@ $BT/apksigner verify 目标名.apk - **曲库**:只走官方 Muse 同步(`MuseDbSync`),不再依赖代码仓库数据库文件 - **曲库同步时效**:默认 **30 天**(`DatabaseBootstrapper.SYNC_TTL_DAYS`)。未到期启动**不联网**、直接用本地曲库;到期后才查询服务器版本,有更新才下载。时效起点记录在 `db_sync_at.txt`,由 `DatabaseBootstrapper.markSynced()` 写入(下载成功或校验为最新时)。设置页「曲库 → 更新」为手动强制检查(绕过时效,仅在服务器版本更新时下载) - **麦克风**:`MicActivator` 常驻占用输入通道(TV/投影需占用后才有演唱声音输出),外接设备热插拔会自动重建 -- **远程日志**:GlogCenter HTTP 接口 `POST http://log.kasugano.cn/glc/v1/log/add`(单条 JSON,字段 +- **远程日志**:接入 GlogCenter 集中式日志(HTTP 接口,单条 JSON)。**域名属敏感信息,不得写入任何文档** + (端点常量见代码 `MiliLog.ENDPOINT`,需要时查代码,勿在 README/AGENTS 中记录域名)。字段: `system`/`date`/`text`/`servername`/`serverip`/`loglevel`/`traceid`/`user`;`date` 必须为 - `yyyy-MM-dd HH:mm:ss.SSS`,否则按时间检索异常)。客户端为 `MiliLog`(有界队列 + 后台线程 + 失败重试), + `yyyy-MM-dd HH:mm:ss.SSS`,否则按时间检索异常。客户端为 `MiliLog`(有界队列 + 后台线程 + 失败重试), 调用点 `MiliLog.info/notice/warn/error` 保持不变;设备 IP/标识通过 `MiliLog.updateDeviceContext()` 注入, 网络变化时自动刷新 - **仓库可见性**:Gitea 仓库保持 **public**(若后续把 App 更新/热更新端点迁到 Gitea,非 public 会导致 403) diff --git a/README.md b/README.md index f93539d..40e4670 100644 --- a/README.md +++ b/README.md @@ -51,8 +51,8 @@ - **曲库**:统一走**官方 Muse 同步**(`mconn.cherryonline.cn` `mls-api/v1/sqlite/sync`,RSA 登录 + 增量文件校验),不再依赖代码托管仓库承载数据库。 - **歌曲源**:接入 `w.w345.my`(`i.php` 取 token → `do.php` 解析播放地址),固定设备标识并复刻签名算法;广告/错号资源(如返回 `wb66.cn/.../719.ts` 或文件名与 musicno 不一致)会被拦截并重试。 - **风控应对**:源对陌生出口 IP 存在试用窗口(约 10 分钟,403"检测到异常行为"),App 检测到 403 后弹窗提示更换公网 IP;同 token 退避重试,不放大请求量。 -- **JS 热更新**:歌曲接口逻辑在 `app/src/main/assets/mobile/ktv_api.js`,安装后从本仓库自动拉取兼容版本(须保留 `KTV_BRIDGE_API: 7` 标记)。 -- **应用更新**:以 Gitea Release 标签作为版本号(如 `1.2.5`),Release 需附带一个 `.apk` 附件;仅当标签高于当前 `BuildConfig.VERSION_NAME` 时提示下载。 +- **JS 热更新**:歌曲接口逻辑在 `app/src/main/assets/mobile/ktv_api.js`,安装后从本仓库自动拉取兼容版本(须保留 `KTV_BRIDGE_API: 8` 标记)。 +- **应用更新**:以 Gitea Release 标签作为版本号(如 `1.3.0`),Release 需附带一个 `.apk` 附件;仅当标签高于当前 `BuildConfig.VERSION_NAME` 时提示下载。 ## 🔧 编译教程 @@ -132,7 +132,7 @@ adb install -r app/build/outputs/apk/release/app-release.apk - **曲库初始化失败**:检查设备网络能否访问 `mconn.cherryonline.cn`;已在设置页提供「重置数据库」。 - **点歌报 403 / 无播放地址**:多为歌曲源对当前公网 IP 的试用窗口到期,重启光猫/路由器更换公网 IP 后恢复。 -- **热更新脚本不生效**:确认远端 `ktv_api.js` 保留 `KTV_BRIDGE_API: 7` 标记,否则内置版本优先。 +- **热更新脚本不生效**:确认远端 `ktv_api.js` 保留 `KTV_BRIDGE_API: 8` 标记,否则内置版本优先。 - **想改签名/ABI**:编辑 `app/build.gradle` 的 `signingConfigs` 与 `ndk.abiFilters` 后重新编译。 ## 项目结构 @@ -145,7 +145,7 @@ maidong-ktv/ │ │ ├── MuseDbSync.kt # 官方曲库同步 │ │ ├── MuseDatabase.kt # 曲库访问 │ │ ├── KtvJsBridge.kt # JS 桥(HTTP/RSA/热更新) -│ │ ├── MiliLog.kt # 远程 syslog 日志 +│ │ ├── MiliLog.kt # 远程日志上报(GlogCenter) │ │ └── SongOkDownloadManager.kt # 下载管理 │ ├── src/main/assets/mobile/ktv_api.js # 歌曲源逻辑(热更新) │ └── src/main/res/ # 资源 / 证书 diff --git a/app/build.gradle b/app/build.gradle index dd2af51..ea14938 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "com.local.ktv" minSdk 21 targetSdk 25 - versionCode 5 - versionName "1.2.5" + versionCode 6 + versionName "1.3.0" ndk { // 双 ABI 打包:兼容 64 位(Exynos 1580 等 arm64-v8a)与 32 位设备(极米 Play 超越版 // 的 Amlogic 950X2/S905X2 采用 32 位 Android 用户态,必须包含 armeabi-v7a,否则 diff --git a/app/src/main/java/com/local/ktv/MainActivity.kt b/app/src/main/java/com/local/ktv/MainActivity.kt index e516748..57d67f2 100644 --- a/app/src/main/java/com/local/ktv/MainActivity.kt +++ b/app/src/main/java/com/local/ktv/MainActivity.kt @@ -1929,6 +1929,8 @@ class MainActivity : AppCompatActivity() { // 关于 addSettingsTitle(content, "关于") addSettingsItem(content, "应用名称", "麦动", null) + addSettingsItem(content, "框架来源", "杨家三郎/麦动KTV", null) + addSettingsItem(content, "内核", "由 DSH 重构数据库源", null) addSettingsItem(content, "版本号", BuildConfig.VERSION_NAME, null) addSettingsItem( content, @@ -8924,7 +8926,8 @@ class MainActivity : AppCompatActivity() { AlertDialog.Builder(this) .setTitle("关于麦动") .setMessage( - "power by 抖音@杨家三郎\n" + + "框架来源:杨家三郎/麦动KTV\n" + + "由 DSH 重构数据库源\n" + "此软件免费开源,请勿付费获取\n" + "版本:" + BuildConfig.VERSION_NAME ) diff --git a/app/src/main/res/raw/mili_log.crt b/app/src/main/res/raw/mili_log.crt deleted file mode 100644 index b85c803..0000000 --- a/app/src/main/res/raw/mili_log.crt +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE-----