Skip to content

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

Description

@patricflachsmann-sudo

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions