You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除已弃用的MissingSplitsManager后Resources异常复现,求解决方案

解决拆分包不匹配导致的Resources$NotFoundException问题

针对你遇到的用户安装错误拆分包引发的资源找不到异常,这里有几个可行的解决方向:

1. 启动时校验拆分包的版本与适配性

直接用SplitInstallManager获取已安装的拆分包列表,逐一核对版本号和设备适配类型:

  • 对比拆分包的versionCode和主包是否完全一致,不一致的直接卸载错误拆分包并引导用户重新安装。
  • 检查拆分包的ABI、语言等配置是否匹配当前设备,避免用户手动装了适配其他设备的拆分包。

示例代码:

val splitManager = SplitInstallManagerFactory.create(context)
val installedSplits = splitManager.installedSplits
val currentVersion = context.packageManager.getPackageInfo(context.packageName, 0).versionCode

installedSplits.forEach { split ->
    if (split.versionCode != currentVersion) {
        splitManager.deinstallSplits(listOf(split.moduleName))
        // 弹出提示:检测到不匹配的安装组件,请卸载后重新通过官方渠道安装
    }
}

2. 全局捕获资源异常并降级

在资源加载环节做兜底,避免异常崩溃:

  • 自定义Application类,重写getResources()方法,捕获Resources$NotFoundException, fallback到系统默认资源或者你预先准备的兜底资源。
  • 也可以在加载资源的工具类里统一处理,比如用ResourcesCompat.getDrawable()替代直接调用getDrawable(),并添加异常捕获。

示例代码:

class MyApp : Application() {
    override fun getResources(): Resources {
        return try {
            super.getResources()
        } catch (e: Resources.NotFoundException) {
            // 返回系统默认资源,或者自己的兜底资源
            Resources.getSystem()
        }
    }
}

3. 从根源限制错误拆分包安装

  • 确保拆分包和主包用同一签名,Android系统会自动拦截签名不匹配的拆分包安装。
  • 不要提供拆分包的单独下载入口,引导用户完全通过官方应用市场(比如Google Play)安装,市场会自动匹配对应设备的正确拆分包,避免用户手动选错。

4. 用Play Core新API替代弃用的MissingSplitsManager

虽然旧的类被弃用,但Play Core的SplitInstallManager可以实现类似的校验逻辑:

  • 启动时检查必要的拆分包是否已安装,没安装的话触发自动安装流程,不让用户进入核心功能直到安装完成。
  • 注册拆分包安装状态监听器,实时处理安装失败或中断的情况。

示例代码:

val splitManager = SplitInstallManagerFactory.create(context)
val requiredModules = listOf("your_required_split") // 替换成你的必要拆分包名

val missingModules = requiredModules.filter { module ->
    !splitManager.installedSplits.any { it.moduleName == module }
}

if (missingModules.isNotEmpty()) {
    val request = SplitInstallRequest.newBuilder()
        .addModules(missingModules)
        .build()
    splitManager.startInstall(request)
    // 显示安装进度弹窗,阻止用户操作
}

内容的提问来源于stack exchange,提问作者casolorz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 18:12:18