启动Google MapsActivity偶发Resources$NotFoundException异常求助
问题根因与修复方案
根因定位
从报错栈的底层异常可以看出崩溃是android.content.res.Resources$NotFoundException触发,本质是Google Maps SDK 18.0.0版本的动态加载(dynamite模块)存在资源读取适配缺陷:
- 开发阶段使用Android Studio的Apply Changes/快速部署功能时,仅更新代码未全量刷新资源索引,会导致应用R类的资源ID和实际打包的资源映射不匹配,Maps SDK读取系统维度资源时找不到对应ID触发崩溃
- Google Play Services会缓存Maps动态模块的资源映射关系,修改应用代码触发资源ID重新生成后,缓存映射与新ID冲突就会触发崩溃;卸载应用会清空关联的动态模块缓存,所以问题会临时消失
修复方案
临时解决方案
开发阶段修改Maps相关代码后,执行Clean Project -> Rebuild Project后全量安装APK,不要使用快速部署功能即可避免触发崩溃。
永久解决方案
- 升级Google Maps SDK到18.2.0及以上稳定版,该版本已修复动态资源加载的适配问题
- 若暂时无法升级SDK,可将XML布局中静态声明的SupportMapFragment改为代码动态创建,规避XML加载时的资源读取问题:
// MapsActivity onCreate中替换原布局加载逻辑 val mapFragment = SupportMapFragment.newInstance() supportFragmentManager.beginTransaction() .add(android.R.id.content, mapFragment) .commit() // 后续照常调用getMapAsync即可
内容的提问来源于stack exchange,提问作者albertbuigues
相关产品推荐
相关产品推荐

