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

升级HERE SDK 3.18后生产环境Preconditions.java报NullPointerException异常

HERE SDK 3.18版本release包空指针崩溃排查方案

问题场景

我们使用Firebase Crashlytics监控生产环境崩溃情况,自升级至3.18版本后,仅在生产环境release包出现如下错误,开发环境从未复现。调用init方法前已做非空校验,可确认问题出自HERE SDK源代码。

错误堆栈

Fatal Exception: java.lang.NullPointerException: Context is null
       at java.util.Objects.requireNonNull(Objects.java:228)
       at com.nokia.maps.f4.a(Preconditions.java:1)
       at com.nokia.maps.v.<init>(AppContextImpl.java:13)
       at com.here.android.mpa.common.ApplicationContext.<init>(ApplicationContext.java:2)
       at com.here.android.mpa.mapping.AndroidXMapFragment.init(AndroidXMapFragment.java:1)
       at my.package.app.fragments.navegacionhere.MapFragmentView.initMapFragment(MapFragmentView.java:538)
       at my.package.app.fragments.navegacionhere.MapFragmentView.<init>(MapFragmentView.java:160)
       at my.package.app.activity.llamadas.DetalleLlamadaActivity.setupMapFragmentView(DetalleLlamadaActivity.java:1339)

根因分析

  • 该问题为HERE SDK 3.18版本特有缺陷,仅在开启混淆的release包触发:混淆会裁剪掉SDK内部预定义的非空校验逻辑,导致Context传递链路断裂
  • SDK内部AppContextImpl初始化时,直接对持有的弱引用Context做强制非空校验,当页面重建、应用后台切前台导致页面Context临时被回收时,没有兜底逻辑,直接抛出空指针

修复方案

  1. 新增混淆规则:在项目的proguard-rules.pro文件中添加HERE SDK专属保留规则,避免内部类被混淆裁剪:
# 保留HERE SDK所有内部类不被混淆
-keep class com.here.** { *; }
-keep class com.nokia.maps.** { *; }
-dontwarn com.here.**
-dontwarn com.nokia.maps.**
  1. 调整初始化时机:将AndroidXMapFragment.init方法的调用时机从MapFragmentView构造方法中后移到Fragment的onViewCreated生命周期阶段,确保此时Fragment已经成功绑定Activity,Context不会为空
  2. 添加上层兜底逻辑:调用init方法时优先取Fragment关联的Activity Context,如Context为空则传入应用全局ApplicationContext进行初始化,ApplicationContext生命周期与应用一致,不会出现空值问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:30:01