googlemaps-samples / googlemaps-samples/android-maps3d-samples

Native SIGABRT in Maps3DDynamite (JNI "java_object == null" in GetObjectClass) seconds after Map3DView creation on Android 16

Open
#48 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Kotlin
Stars
9
Forks
5
Avg merge
2d 9h
Merged PRs (30d)
9

Description

Environment

  • SDK: com.google.android.gms:play-services-maps3d:0.2.0
  • Dynamite module on device: dl-Maps3DDynamite.integ_262080800100400.apk (com.google.android.gms.policy_maps3d_dynamite@262080801)
  • Device: Samsung Galaxy A54 (SM-A546B), Android 16 (build BP4A.251205.006, fingerprint samsung/a54xnaeea/a54x:16), arm64
  • Maps 3D SDK for Android API enabled on the key; billing active

Summary

The app process aborts with a native SIGABRT raised by ART's JNI checker a few seconds (~5-10s) after a Map3DView is created and the renderer starts. The abort happens on a thread created by the Maps3D Dynamite module (Thread-10/Thread-12, plain pthread), with no managed frames:

JNI DETECTED ERROR IN APPLICATION: java_object == null
    in call to GetObjectClass
Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 19823 (Thread-10), pid 18822 (…dronescout)

backtrace (all app frames inside the Dynamite module):
  #05 art::JNI<false>::GetObjectClass(_JNIEnv*, _jobject*)+700 (libart.so)
  #06 pc 003312c4  dl-Maps3DDynamite.integ_262080800100400.apk (offset 0x210000)
  #07 pc 003339d8  dl-Maps3DDynamite.integ_262080800100400.apk
  #08 pc 007629fc  dl-Maps3DDynamite.integ_262080800100400.apk
  ...
  #21 __pthread_start (libc.so)

At abort time the main thread is executing Dynamite code scheduled via Handler (obfuscated frames m138.cyq.runm138.ctu.em138.acg.bm138.csg.b from com.google.android.gms.policy_maps3d_dynamite@262080801@262080800025).

Reproduction

Map3DView created programmatically with Map3DView(context, Map3DOptions(...)) (valid camera: lat 45.86, lng 8.94, alt 0, heading 0, tilt 65, range 1800, default constraints, HYBRID), onCreate(null) called, lifecycle forwarded from the Activity (onStart/onResume/…), getMap3DViewAsync() invoked. The view renders briefly, then the process dies.

Ruled out on our side (crash is identical in every combination):

  • debug build vs release build (i.e. with and without R8; also tested with -keep class com.google.android.gms.maps3d.** { *; })
  • Map3DMode.HYBRID vs Map3DMode.SATELLITE
  • plain Map3DView(context) vs Map3DView(context, Map3DOptions) with fully-populated options

The view is hosted inside a Flutter PlatformView (hybrid composition, real Activity context, lifecycle forwarded from the Activity's Lifecycle), but given the abort originates entirely inside the Dynamite module on its own render thread, the host UI toolkit does not appear relevant.

Possibly related: #14 (native runtime abort) and #18 (samples not working on Android 16 — same OS version as here, different failure signature).

Happy to provide the full logcat dump or run instrumented builds if that helps.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the crash with the programmatic Map3DView setup described in the issue on Android 16, then inspect the supplied logcat and native backtrace. Done would require identifying a change or confirmed upstream resolution that prevents the SIGABRT after Map3DView creation across the listed configurations.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, kotlin
Domain
mobile-dev
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.