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

targetSDKVersion从27升级至29后Map Fragment导致Activity崩溃是什么原因?

MapFragment 升级targetSDK到29后崩溃原因

你当前布局中使用的配置:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/map"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              class="com.google.android.gms.maps.MapFragment" />

触发崩溃的核心原因是API 29(Android 10)的系统规则变更和旧版地图SDK适配不到位,具体如下:

  • Google Maps SDK未适配新版本系统:你项目中依赖的Google Play Services Maps SDK版本没有对API 29做兼容适配。API 29对应用的渲染机制、进程沙箱限制、系统服务调用逻辑都做了大幅调整,旧版SDK调用系统能力时触发异常后没有兼容逻辑,直接崩溃。targetSDK 27时不会触发这些新的系统限制,因此运行正常。
  • 分区存储规则不兼容:API 29默认开启分区存储机制,旧版Maps SDK缓存地图瓦片时会直接读写公共存储目录,不符合分区存储的权限要求,触发IO异常导致崩溃。targetSDK 27时分区存储还未上线,不会触发该限制。
  • 权限校验逻辑升级:API 29对位置权限的校验更加严格,旧版MapFragment没有做权限未获取的异常捕获,当应用未申请到位置权限、或者权限声明不符合API 29要求时,会直接触发崩溃。
修复方案
  • 升级Google Play Services Maps SDK到适配API 29及以上的官方最新版本,同时将布局中的com.google.android.gms.maps.MapFragment替换为com.google.android.gms.maps.SupportMapFragment,如果项目已经迁移到AndroidX,使用AndroidX版本的对应地图Fragment实现。
  • 若暂时无法升级地图SDK,可在AndroidManifest.xml的<application>节点添加android:requestLegacyExternalStorage="true",临时关闭分区存储限制,兼容旧版SDK的存储需求,该配置仅对targetSDK 29、30生效,升级到更高targetSDK时需要完成分区存储适配。
  • 完善位置权限的动态申请逻辑,确保在初始化MapFragment之前已经获取到所需的位置权限,避免权限问题引发的崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:06:04