mapbox / mapbox/mapbox-maps-android

MapboxSDKCommon.getContext crash

オープン
#2,455 コメント 14 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

auto-triaged bug :beetle: needs info
主要言語
Kotlin
スター
578
フォーク
161
PR マージ指標
30日以内にマージされた PR はありません

説明

Environment

  • Android OS version: 14
  • Devices affected: Mainly Samsung devices
  • Maps SDK Version: 10.5.0

Observed behavior and steps to reproduce

In crashlytics I receive a bunch of crashes from a small amount of users using my app where the app randomly crashes with the following stacktrace:

Exception java.lang.ExceptionInInitializerError:
    at com.mapbox.common.location.LocationUpdatesReceiver$service$2.invoke (LocationUpdatesReceiver.kt:10)
    at com.mapbox.common.location.LocationUpdatesReceiver$service$2.invoke (LocationUpdatesReceiver.kt:9)
    at kotlin.SynchronizedLazyImpl.getValue (LazyJVM.kt)
    at com.mapbox.common.location.LocationUpdatesReceiver.getService (LocationUpdatesReceiver.kt)
    at com.mapbox.common.location.LocationUpdatesReceiver.onReceive (LocationUpdatesReceiver.kt)
    at android.app.ActivityThread.handleReceiver (ActivityThread.java:4719)
    at android.app.ActivityThread.-$$Nest$mhandleReceiver
    at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2448)
    at android.os.Handler.dispatchMessage (Handler.java:106)
    at android.os.Looper.loopOnce (Looper.java:257)
    at android.os.Looper.loop (Looper.java:368)
    at android.app.ActivityThread.main (ActivityThread.java:8839)
    at java.lang.reflect.Method.invoke
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:572)
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1049)
Caused by Bb.e: lateinit property appContext has not been initialized
    at com.mapbox.common.MapboxSDKCommon.getContext (MapboxSDKCommon.kt)
    at com.mapbox.common.location.LocationServiceImpl.<clinit> (LocationServiceImpl.kt)

From what I was able to gather this happens at random, sometimes when the app is backgrounded or sometimes when the app is left open. I tried many combinations to get it to happen to me but I myself am unable to reproduce it or even trigger it.

I'm not doing anything special, below is my code to initialize the map using Compose:

val mapState = rememberMapState {
    gesturesSettings = GesturesSettings.Builder()
        .setPinchScrollEnabled(false)
        .build()
}

MapboxMap(
    modifier = Modifier.fillMaxSize(),
    composeMapInitOptions = ComposeMapInitOptions(
        mapOptions = MapOptions.Builder()
            .contextMode(ContextMode.UNIQUE)
            .viewportMode(ViewportMode.DEFAULT)
            .build()
    ),
    mapState = mapState,
    scaleBar = { /* No scalebar */ },
    logo = { Logo(contentPadding = PaddingValues(20.dp)) },
    attribution = {
        Attribution(
            iconColor = theme.colorScheme.secondary,
            contentPadding = PaddingValues(
                start = 110.dp,
                top = 0.dp,
                end = 0.dp,
                bottom = 20.dp
            )
        )
    }
) {
    // Load the style on the fly.
    MapEffect(styleUrl) {
        it.mapboxMap.loadStyle(styleUrl)
    }
}

I receive the styleURL from a viewModel.

Then there's also a button added that toggles the user location. That's being done this way:

MapEffect(isShowingUsersLocation) {
    it.location.updateSettings {
        enabled = isShowingUsersLocation
    }
}

Expected behavior

A crash not related to the location update service.

Notes / preliminary analysis

I run the app through R8, but can't tell if that's the reason of the crashes as I'm unable to reproduce it in either an R8 built or a non R8 built.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

LocationUpdatesReceiver.kt を通るスタックトレースから始め、MapboxSDKCommon.kt と LocationServiceImpl.kt を調査してください。位置情報サービスが読み込まれる前に appContext がいつ初期化されるかに注目します。issue で説明されている background および receiver の経路を再現するか、その動作を推論してください。appContext が初期化されていないことが原因で位置情報更新サービスがクラッシュしなくなれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
android, kotlin
領域
mobile-dev
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
静か
明瞭さ
説明が足りない
初心者へのやさしさ
42/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。