Repository navigation
MusicPlayer v2.22.18 (code 59)
MusicPlayer v2.22.18
- 版本号:versionName 2.22.18 / versionCode 59
- 日期:2026-09-10
- 本版主题:移除 INTERNET 权限——系统级保证纯本地播放、零联网
需求背景
已厘清 INTERNET 权限的来源:Capacitor 默认设计是联网加载页面(支持 server.url
远程加载 / live-reload 热更新),模板无条件带入 android.permission.INTERNET——
与本应用 JS 是否发请求无关(权限是静态清单声明,不看运行时行为)。
核实结论(本版动前的勘察):
- 权限声明在
android/app/src/main/AndroidManifest.xml(cap add android一次性拷入,
cap sync不重写); capacitor.config.ts未配server.url,页面经 WebView 进程内 scheme 拦截
(https://localhost/_capacitor_file_)加载,不出网卡;- grep 全量
www/JS:仅有的fetch全是本地 URL(音轨 blob/content://、FFmpeg wasm
本地文件),零远程请求; - 本地播放、SAF 选歌、转码、媒体通知均不依赖该权限。
→ 结论:这条权限是「纯预留」,删除后系统将强制禁止本应用建立任何网络连接,
作为隐私卖点保留;未来加在线功能(歌词抓取/在线流/检查更新)或需 live-reload 调试时,
在 Manifest 注释处加回一行即可。
实现
AndroidManifest.xml:删除<uses-permission android:name="android.permission.INTERNET" />,
原位置留还原指引注释;android/app/build.gradle:versionCode 58 → 59,versionName 2.22.17 → 2.22.18;www/index.html:设置页版本号 v2.22.18。
验证(aapt 实测最终 APK)
aapt dump permissions app-debug.apk 输出(无 INTERNET,且无依赖库合并回注):
uses-permission: android.permission.READ_MEDIA_IMAGES
uses-permission: android.permission.POST_NOTIFICATIONS
uses-permission: android.permission.FOREGROUND_SERVICE
uses-permission: android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK
permission: com.musicplayer.app.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION(androidx 自动生成)
构建与归档
- cap copy →
assembleDebugBUILD SUCCESSFUL(20s,JDK 21)。 - 归档:
python _release/archive_release.py 2.22.18 59(source 快照 32.3MB + APK 本版/回滚基线 + 双 zip)。 - 回滚基线:
APK/app-v2.22.17-code58.apk(亦在<归档>/_apk_backup/)。
装机记录(待补)
adb push成功;pm install -r两次INSTALL_FAILED_ABORTED: User rejected permissions
(设备熄屏时弹窗弹不出直接秒拒;唤醒亮屏后 pm install 挂起等待设备端确认)。- 待在平板上确认厂商USB 安装弹窗后补装,并实测:
- 正常启动、扫描/播放本地歌曲(验证 scheme 拦截加载不受影响);
- 转码开关开启后 FFmpeg wasm 本地加载正常;
- 设置 → 关于,版本显示 v2.22.18;
- 系统设置 → 应用 → 权限,确认无「网络」相关项。
构建备忘
同 v2.22.13(cap copy → JAVA_HOME=<JDK 21> → assembleDebug
→ adb push /data/local/tmp + pm install -r)。
装机坑补充:厂商设备熄屏状态下 USB 安装确认弹窗不弹、直接秒拒
(INSTALL_FAILED_ABORTED: User rejected permissions);先唤醒亮屏再装。