V1.4.2: 修复极米 H1S(Android 5.1.1) 一打开就闪退 —— 存储根目录写死导致
真正根因(用崩溃诊断包在该机上逐步定位得出,非此前推测的 API 守卫问题): - AppPaths 把存储根写死成 /storage/emulated/0/MaidongKTV,该机上此路径不可写, ensureDirectories() 里 check(it.exists() || it.mkdirs()) 抛异常 → onCreate 中断 → App 一打开就闪退(该机历来所有版本均如此)。 - 定位过程: 逐条语句打启动轨迹 + 把异常直接写进轨迹通道,最终锁定 「oc431 之后、oc432 之前」= AppPaths.ensureDirectories();包上 try/catch 后 App 立即可正常打开,确认根因。 修复: - AppPaths 改为运行时解析可写根目录: Environment 外部根 → 历史硬编码路径 → getExternalFilesDir() → filesDir,取第一个「可建且可写」的(幂等 init)。 - AppPaths.init(context) 在 KtvApplication.attachBaseContext 最前面调用, 早于任何 AppPaths 访问;路径成员由 val 改为 getter。 - ensureDirectories() 不再抛异常,返回 Boolean;MainActivity 拿到 false 只告警继续。 - 去掉编译期内联的路径常量: MuseDatabase.VIDEO_ROOT(const→getter)、 defaultDbFile()/findDatabaseFile() 改用 AppPaths.databaseFile (否则改存储根后 DB 仍指向硬编码路径)。 - 用户可见的目录提示文案改用 AppPaths.*Dir.absolutePath。 - 启动上报一行 STORAGE root=.. by=.. envState=.. probe=[..] 到远程日志, 便于排查不同盒子的存储差异。 验证: - DEX 中「内联的完整 DB 路径」由 1 处 → 0 处。 - 单元测试 2/2 通过;lint NewApi 闸门通过;签名证书不变(可覆盖 1.4.0/诊断包)。 - AGENTS.md 增补「存储根目录必须运行时解析」条目。 说明: versionCode 18~21 被本机临时诊断包占用,本版取 22 以便直接覆盖安装。
This commit is contained in:
+2
-2
@@ -11,8 +11,8 @@ android {
|
||||
applicationId "com.local.ktv"
|
||||
minSdk 21
|
||||
targetSdk 25
|
||||
versionCode 17
|
||||
versionName "1.4.1"
|
||||
versionCode 22
|
||||
versionName "1.4.2"
|
||||
ndk {
|
||||
// 双 ABI 打包:兼容 64 位(Exynos 1580 等 arm64-v8a)与 32 位设备(极米 Play 超越版
|
||||
// 的 Amlogic 950X2/S905X2 采用 32 位 Android 用户态,必须包含 armeabi-v7a,否则
|
||||
|
||||
Reference in New Issue
Block a user