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

Firebase Crashlytics报Google Maps空指针崩溃,手动测试仅告警

Google Maps相关NullPointerException崩溃排查方案

问题概述

Firebase Crashlytics捕获到Google Maps相关的NullPointerException崩溃,但本地手动测试仅出现告警,核心功能无异常。更新com.google.android.gms:play-services后问题依旧,且崩溃涉及不同版本的Play Services。

崩溃日志分析

崩溃触发于系统低内存回收流程(onLowMemory/onTrimMemory),SupportMapFragment处理低内存事件时,调用了一个空接口对象的方法,属于Google Maps Dynamite模块内部的逻辑问题:

Fatal Exception: java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.br.v()' on a null object reference
       at com.google.maps.api.android.lib6.impl.co.h(:com.google.android.gms.dynamite_mapsdynamite@224312037@22.43.12 (150400-0))
       at com.google.android.gms.maps.internal.o.ba(:com.google.android.gms.dynamite_mapsdynamite@224312037@22.43.12 (150400-0):15)
       at ey.onTransact(:com.google.android.gms.dynamite_mapsdynamite@224312037@22.43.12 (150400-0):4)
       at android.os.Binder.transact(Binder.java:1046)
       at com.google.android.gms.internal.maps.zza.zzc(com.google.android.gms:play-services-maps@@18.1.0:2)
       at com.google.android.gms.maps.internal.zzk.onLowMemory(com.google.android.gms:play-services-maps@@18.1.0:2)
       at com.google.android.gms.maps.zzau.onLowMemory(com.google.android.gms:play-services-maps@@18.1.0:1)
       at com.google.android.gms.dynamic.DeferredLifecycleHelper.onLowMemory(com.google.android.gms:play-services-base@@18.0.1:1)
       at com.google.android.gms.maps.SupportMapFragment.onLowMemory(com.google.android.gms:play-services-maps@@18.1.0:1)
       at androidx.fragment.app.Fragment.performLowMemory(Fragment.java:3223)
       at androidx.fragment.app.FragmentManager.dispatchLowMemory(FragmentManager.java:3006)
       ...

本地告警日志分析

本地测试的SecurityException属于配置问题,是Google证书验证失败导致Consent Verifier无法更新快照,和崩溃无直接关联:

Unable to update local snapshot for com.google.android.libraries.consentverifier#com.app.package, may result in stale flags.
java.util.concurrent.ExecutionException: java.lang.SecurityException: GoogleCertificatesRslt: not allowed: pkg=com.app.package, sha256=[e8173febe247a2e7243253c1ef9ce437fc2d0b4fabffef1ae063e706303f297c], atk=false, ver=224312044.true (go/gsrlt)
...
Caused by: java.lang.SecurityException: GoogleCertificatesRslt: not allowed: pkg=com.app.package, sha256=[e8173febe247a2e7243253c1ef9ce437fc2d0b4fabffef1ae063e706303f297c], atk=false, ver=224312044.true (go/gsrlt)

解决方案

1. 捕获低内存场景的异常

自定义Fragment包装SupportMapFragment,重写低内存相关方法捕获内部空指针:

class SafeSupportMapFragment : SupportMapFragment() {
    override fun onLowMemory() {
        try {
            super.onLowMemory()
        } catch (e: NullPointerException) {
            Log.w("SafeMapFragment", "Google Maps onLowMemory NPE caught", e)
        } catch (e: Exception) {
            Log.w("SafeMapFragment", "Google Maps onLowMemory exception caught", e)
        }
    }

    override fun onTrimMemory(level: Int) {
        try {
            super.onTrimMemory(level)
        } catch (e: NullPointerException) {
            Log.w("SafeMapFragment", "Google Maps onTrimMemory NPE caught", e)
        } catch (e: Exception) {
            Log.w("SafeMapFragment", "Google Maps onTrimMemory exception caught", e)
        }
    }
}

将布局中的SupportMapFragment替换为该自定义Fragment。

2. 单独升级Play Services Maps版本

跳过整体play-services更新,直接指定play-services-maps的最新稳定版:

implementation 'com.google.android.gms:play-services-maps:18.2.0' // 替换为当前最新稳定版

Google后续版本可能修复了低内存回收时的空指针问题。

3. 优化Fragment生命周期管理

  • 在onDestroyView中清空GoogleMap及相关引用:
override fun onDestroyView() {
    super.onDestroyView()
    mapView?.onDestroy()
    googleMap = null // 清空GoogleMap实例引用
}
  • 避免在Fragment销毁后仍持有Map相关对象引用。

4. 解决本地告警的配置问题

在Google Cloud Console中:

  • 确认应用包名com.app.package已正确注册
  • 将本地测试签名的SHA256指纹添加到API密钥的允许列表中
    该操作仅解决本地告警,不影响崩溃修复。

总结

该崩溃是Google Maps Dynamite模块在低内存场景下的内部空指针问题,通过自定义Fragment捕获异常、升级Maps库版本、优化生命周期管理可有效解决。本地告警属于签名配置问题,需补充Cloud Console中的签名信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:30:41