maps icon indicating copy to clipboard operation
maps copied to clipboard

[Bug]: snapshotManager.takeSnap causes crash on Android

Open shedworth opened this issue 10 months ago • 1 comments

Mapbox Implementation

Mapbox

Mapbox Version

11.0.0

React Native Version

0.74.5

Platform

Android

@rnmapbox/maps version

10.1.37

Standalone component to reproduce

import React from 'react';
import { snapshotManager } from '@rnmapbox/maps';
import { useEffect, useState } from "react-native";

const MapboxBugTestComponent = () => {
  const [snapshotURI, setSnapshotURI] = useState();
  
  useEffect(() => {
    (async () => {
      const uri = await snapshotManager.takeSnap({
        centerCoordinate: [-74.12641, 40.797968],
      });
      setSnapshotURI(uri);
    })();
  }, []);

  return null
}

Observed behavior and steps to reproduce

Calling snapshotManager.takeSnap crashes the device. It doesn't seem to matter what options are passed. The simple example above uses the hardcoded center coordinates from the JSDoc example for that function.

Javascript trace:

 ERROR  Your app just crashed. See the error below.
java.lang.UnsupportedOperationException
  java.nio.ByteBuffer.array(ByteBuffer.java:774)
  com.rnmapbox.rnmbx.v11compat.image.ImageKt.toByteArray(Image.kt:29)
  com.rnmapbox.rnmbx.utils.BitmapUtils.createImgBase64(BitmapUtils.kt:109)
  com.rnmapbox.rnmbx.modules.RNMBXSnapshotModule$takeSnap$1$1.invoke(RNMBXSnapshotModule.kt:62)
  com.rnmapbox.rnmbx.modules.RNMBXSnapshotModule$takeSnap$1$1.invoke(RNMBXSnapshotModule.kt:50)
  com.rnmapbox.rnmbx.v11compat.snapshot.SnapshotKt$sam$com_mapbox_maps_SnapshotResultCallback$0.onSnapshotResult(Unknown Source:2)
  com.mapbox.maps.Snapshotter.start$lambda$13(Snapshotter.kt:181)
  com.mapbox.maps.Snapshotter.$r8$lambda$U-QghdWV6YQyBenjwZeiG2To9GQ(Unknown Source:0)
  com.mapbox.maps.Snapshotter$$ExternalSyntheticLambda4.run(Unknown Source:6)
  android.os.MessageQueue.nativePollOnce(Native Method)
  android.os.MessageQueue.next(MessageQueue.java:336)
  android.os.Looper.loop(Looper.java:181)
  android.app.ActivityThread.main(ActivityThread.java:7560)
  java.lang.reflect.Method.invoke(Native Method)
  com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
  com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

Native trace

04-07 12:07:49.846 17403 17403 W System.err: java.lang.UnsupportedOperationException
04-07 12:07:49.846 17403 17403 W System.err: 	at java.nio.ByteBuffer.array(ByteBuffer.java:774)
04-07 12:07:49.846 17403 17403 W System.err: 	at com.rnmapbox.rnmbx.v11compat.image.ImageKt.toByteArray(Image.kt:29)
04-07 12:07:49.846 17403 17403 W System.err: 	at com.rnmapbox.rnmbx.utils.BitmapUtils.createImgBase64(BitmapUtils.kt:109)
04-07 12:07:49.846 17403 17403 W System.err: 	at com.rnmapbox.rnmbx.modules.RNMBXSnapshotModule$takeSnap$1$1.invoke(RNMBXSnapshotModule.kt:62)
04-07 12:07:49.846 17403 17403 W System.err: 	at com.rnmapbox.rnmbx.modules.RNMBXSnapshotModule$takeSnap$1$1.invoke(RNMBXSnapshotModule.kt:50)
04-07 12:07:49.846 17403 17403 W System.err: 	at com.rnmapbox.rnmbx.v11compat.snapshot.SnapshotKt$sam$com_mapbox_maps_SnapshotResultCallback$0.onSnapshotResult(Unknown Source:2)
04-07 12:07:49.846 17403 17403 W System.err: 	at com.mapbox.maps.Snapshotter.start$lambda$13(Snapshotter.kt:181)
04-07 12:07:49.846 17403 17403 W System.err: 	at com.mapbox.maps.Snapshotter.$r8$lambda$U-QghdWV6YQyBenjwZeiG2To9GQ(Unknown Source:0)
04-07 12:07:49.846 17403 17403 W System.err: 	at com.mapbox.maps.Snapshotter$$ExternalSyntheticLambda4.run(Unknown Source:6)
04-07 12:07:49.846 17403 17403 W System.err: 	at android.os.MessageQueue.nativePollOnce(Native Method)
04-07 12:07:49.846 17403 17403 W System.err: 	at android.os.MessageQueue.next(MessageQueue.java:336)
04-07 12:07:49.846 17403 17403 W System.err: 	at android.os.Looper.loop(Looper.java:181)
04-07 12:07:49.846 17403 17403 W System.err: 	at android.app.ActivityThread.main(ActivityThread.java:7560)
04-07 12:07:49.846 17403 17403 W System.err: 	at java.lang.reflect.Method.invoke(Native Method)
04-07 12:07:49.846 17403 17403 W System.err: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
04-07 12:07:49.846 17403 17403 W System.err: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
04-07 12:07:49.847 17403 17403 E Mapbox  : [run_loop]: Please check the following Java stacktrace for more information related to the exception: null
04-07 12:07:49.847 17403 17403 D AndroidRuntime: Shutting down VM
--------- beginning of crash
04-07 12:07:49.848 17403 17403 E AndroidRuntime: FATAL EXCEPTION: main
04-07 12:07:49.848 17403 17403 E AndroidRuntime: Process: com.chirpbirding.birda_dev, PID: 17403
04-07 12:07:49.848 17403 17403 E AndroidRuntime: java.lang.UnsupportedOperationException
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at java.nio.ByteBuffer.array(ByteBuffer.java:774)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at com.rnmapbox.rnmbx.v11compat.image.ImageKt.toByteArray(Image.kt:29)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at com.rnmapbox.rnmbx.utils.BitmapUtils.createImgBase64(BitmapUtils.kt:109)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at com.rnmapbox.rnmbx.modules.RNMBXSnapshotModule$takeSnap$1$1.invoke(RNMBXSnapshotModule.kt:62)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at com.rnmapbox.rnmbx.modules.RNMBXSnapshotModule$takeSnap$1$1.invoke(RNMBXSnapshotModule.kt:50)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at com.rnmapbox.rnmbx.v11compat.snapshot.SnapshotKt$sam$com_mapbox_maps_SnapshotResultCallback$0.onSnapshotResult(Unknown Source:2)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at com.mapbox.maps.Snapshotter.start$lambda$13(Snapshotter.kt:181)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at com.mapbox.maps.Snapshotter.$r8$lambda$U-QghdWV6YQyBenjwZeiG2To9GQ(Unknown Source:0)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at com.mapbox.maps.Snapshotter$$ExternalSyntheticLambda4.run(Unknown Source:6)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at android.os.MessageQueue.nativePollOnce(Native Method)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at android.os.MessageQueue.next(MessageQueue.java:336)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:181)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:7560)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
04-07 12:07:49.848 17403 17403 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
04-07 12:07:49.852 17403 17403 E DevLauncher: DevLauncher tries to handle uncaught exception.
04-07 12:07:49.852 17403 17403 E DevLauncher: java.lang.UnsupportedOperationException
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at java.nio.ByteBuffer.array(ByteBuffer.java:774)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at com.rnmapbox.rnmbx.v11compat.image.ImageKt.toByteArray(Image.kt:29)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at com.rnmapbox.rnmbx.utils.BitmapUtils.createImgBase64(BitmapUtils.kt:109)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at com.rnmapbox.rnmbx.modules.RNMBXSnapshotModule$takeSnap$1$1.invoke(RNMBXSnapshotModule.kt:62)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at com.rnmapbox.rnmbx.modules.RNMBXSnapshotModule$takeSnap$1$1.invoke(RNMBXSnapshotModule.kt:50)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at com.rnmapbox.rnmbx.v11compat.snapshot.SnapshotKt$sam$com_mapbox_maps_SnapshotResultCallback$0.onSnapshotResult(Unknown Source:2)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at com.mapbox.maps.Snapshotter.start$lambda$13(Snapshotter.kt:181)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at com.mapbox.maps.Snapshotter.$r8$lambda$U-QghdWV6YQyBenjwZeiG2To9GQ(Unknown Source:0)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at com.mapbox.maps.Snapshotter$$ExternalSyntheticLambda4.run(Unknown Source:6)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at android.os.MessageQueue.nativePollOnce(Native Method)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at android.os.MessageQueue.next(MessageQueue.java:336)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at android.os.Looper.loop(Looper.java:181)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at android.app.ActivityThread.main(ActivityThread.java:7560)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at java.lang.reflect.Method.invoke(Native Method)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
04-07 12:07:49.852 17403 17403 E DevLauncher: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
04-07 12:07:49.858 17403 17403 I Timeline: Timeline: Activity_launch_request time:1005888050
04-07 12:07:51.887 17403 18502 I Process : Sending signal. PID: 17403 SIG: 9

Expected behavior

snapshotManager.takeSnap should return a promise that resolves to the uri of the snapshot.

Notes / preliminary analysis

No response

Additional links and references

No response

shedworth avatar Apr 07 '25 11:04 shedworth