Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Android native crash when using multiple layers #9786

Closed
ericsvg opened this issue Aug 17, 2017 · 4 comments
Closed

Android native crash when using multiple layers #9786

ericsvg opened this issue Aug 17, 2017 · 4 comments
Labels
Android Mapbox Maps SDK for Android Core The cross-platform C++ core, aka mbgl crash

Comments

@ericsvg
Copy link

ericsvg commented Aug 17, 2017

Platform: Android
Mapbox SDK version: 5.1.2

I have this recurring native crash that seems to be related to me adding several layers, each containing roughly between 20 and 50 linestrings. The number of layers can go up to a hundred or so, but the crash sometimes happens when loading the very first few ones (more are added as the user moves on the map).

I'm not sure whether this is something I'm doing wrong or if it might be an issue from the library. The crash happens randomly on a wide variety of devices, and can occur pretty fast even on high-end ones. There's nothing too exotic in what I do, the layers just have some categorical color stops.

Here's the stack trace:

********** Crash dump: **********
Build fingerprint: 'google/angler/angler:8.0.0/OPP4.170623.014/4187591:user/release-keys'
pid: 24044, tid: 24044, name: s.android.debug  >>> com.myapp.android.debug <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
Stack frame #00 pc 000000000018db8c  /lib/arm64/libmapbox-gl.so: Routine operator()<mapbox::geojsonvt::detail::vt_point> at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/release/arm64-v8a/../../../../../../../mason_packages/headers/geojsonvt/6.2.1/include/mapbox/geojsonvt/clip.hpp:78
Stack frame #01 pc 0000000000192efc  /lib/arm64/libmapbox-gl.so: Routine std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >::__get_long_pointer() const at /opt/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/string:1817
Stack frame #02 pc 0000000000185b84  /lib/arm64/libmapbox-gl.so: Routine vt_feature at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/release/arm64-v8a/../../../../../../../mason_packages/headers/geojsonvt/6.2.1/include/mapbox/geojsonvt/types.hpp:131
Stack frame #03 pc 0000000000209288  /lib/arm64/libmapbox-gl.so: Routine __optional_storage at /opt/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/experimental/optional:279
Stack frame #04 pc 0000000000207140  /lib/arm64/libmapbox-gl.so: Routine recursive_wrapper at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/release/arm64-v8a/../../../../../../../mason_packages/headers/variant/1.1.4/include/mapbox/recursive_wrapper.hpp:59
Stack frame #05 pc 0000000000205e2c  /lib/arm64/libmapbox-gl.so: Routine Transitioning at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/release/arm64-v8a/../../../../../../../src/mbgl/style/properties.hpp:?
Stack frame #06 pc 00000000002090c8  /lib/arm64/libmapbox-gl.so: Routine auto mbgl::style::Transitioning<mbgl::style::PropertyValue<mbgl::style::CirclePitchScaleType> >::evaluate<mbgl::PropertyEvaluator<mbgl::style::CirclePitchScaleType> >(mbgl::PropertyEvaluator<mbgl::style::CirclePitchScaleType> const&, std::__ndk1::chrono::time_point<std::__ndk1::chrono::time_point::steady_clock, std::__ndk1::chrono::time_point::duration<long long, std::__ndk1::chrono::ratio<1l, 1000000000l> > >) const at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/release/arm64-v8a/../../../../../../../src/mbgl/style/properties.hpp:57
Stack frame #07 pc 0000000000156f60  /lib/arm64/libmapbox-gl.so: Routine ~shared_ptr at /opt/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/memory:4599
Stack frame #08 pc 000000000012647c  /lib/arm64/libmapbox-gl.so: Routine ~__tree at /opt/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/__tree:1716
Stack frame #09 pc 0000000000089a3c  /lib/arm64/libmapbox-gl.so: Routine bool std::__ndk1::equal<std::__ndk1::__map_const_iterator<std::__ndk1::__tree_const_iterator<std::__ndk1::__value_type<float, mbgl::style::LightAnchorType>, std::__ndk1::__tree_node<std::__ndk1::__value_type<float, mbgl::style::LightAnchorType>, void*>*, long> >, std::__ndk1::__map_const_iterator<std::__ndk1::__tree_const_iterator<std::__ndk1::__value_type<float, mbgl::style::LightAnchorType>, std::__ndk1::__tree_node<std::__ndk1::__value_type<float, mbgl::style::LightAnchorType>, void*>*, long> >, std::__ndk1::__equal_to<std::__ndk1::pair<float const, mbgl::style::LightAnchorType>, std::__ndk1::pair<float const, mbgl::style::LightAnchorType> > >(std::__ndk1::__map_const_iterator<std::__ndk1::__tree_const_iterator<std::__ndk1::__value_type<float, mbgl::style::LightAnchorType>, std::__ndk1::__tree_node<std::__ndk1::__value_type<float, mbgl::style::LightAnchorType>, void*>*, long> >, std::__ndk1::__map_const_iterator<std::__ndk1::__tree_const_iterator<std::__ndk1::__value_type<float, mbgl::style::LightAnchorType>, std::__ndk1::__tree_node<std::__ndk1::__value_type<float, mbgl::style::LightAnchorType>, void*>*, long> >, std::__ndk1::__map_const_iterator<std::__ndk1::__tree_const_iterator<std::__ndk1::__value_type<float, mbgl::style::LightAnchorType>, std::__ndk1::__tree_node<std::__ndk1::__value_type<float, mbgl::style::LightAnchorType>, void*>*, long> >, std::__ndk1::__equal_to<std::__ndk1::pair<float const, mbgl::style::LightAnchorType>, std::__ndk1::pair<float const, mbgl::style::LightAnchorType> >) at /opt/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/algorithm:1198
Stack frame #10 pc 00000000000957c4  /lib/arm64/libmapbox-gl.so: Routine mbgl::android::NativeMapView::queryRenderedFeaturesForPoint(_JNIEnv&, float, float, jni::Array<jni::Object<jni::StringTag>, void>, jni::Array<jni::Object<jni::ObjectTag>, void>) at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/src/native_map_view.cpp:?
Stack frame #11 pc 0000000000026bdc  /oat/arm64/base.odex (offset 0x23000)

Note: for some reason running make android-lib-arm-v8 or make apackage doesn't generate the libmapbox-gl.so file in MapboxAndroidSDK/src/main/jniLibs/ so I used one in the intermediates.

Let me know if you need any other kind of information.

@tobrun tobrun added Android Mapbox Maps SDK for Android Core The cross-platform C++ core, aka mbgl crash labels Aug 17, 2017
@tobrun
Copy link
Member

tobrun commented Aug 17, 2017

Thank you for the report, will try reproducing this with information given above.

Note: for some reason running make android-lib-arm-v8 or make apackage doesn't generate the libmapbox-gl.so file in MapboxAndroidSDK/src/main/jniLibs/ so I used one in the intermediates.

Since #8363 we have integrated our C++ build as part of the gradle build. This means that the C++ step is an intermediate step of building the gradle output (in our case an aar file).

@ericsvg
Copy link
Author

ericsvg commented Aug 17, 2017

Since #8363 we have integrated our C++ build as part of the gradle build. This means that the C++ step is an intermediate step of building the gradle output (in our case an aar file).

I'm a bit confused as to which .so file to use, so I downloaded the sources for the release v5.1.2, ran make android-configuration and opened the project in platform/android. Then I just built the project and used the same folder as source for ndk-stack (MapboxGLAndroidSDK/build/intermediates/transforms/mergeJniLibs/debug/folders/2000/3/main/lib/arm64-v8a/, phone is a Nexus 6P). This gave me an entirely different stack trace:

********** Crash dump: **********
Build fingerprint: 'google/angler/angler:8.0.0/OPP4.170623.014/4187591:user/release-keys'
pid: 24044, tid: 24044, name: s.android.debug  >>> com.myapp.android.debug <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
Stack frame #00 pc 000000000018db8c  /lib/arm64/libmapbox-gl.so: Routine jni::TypeSignature<jni::Array<jni::Object<mbgl::android::geojson::Feature>, void> (float, float, jni::Array<jni::Object<jni::StringTag>, void>, jni::Array<jni::Object<jni::ObjectTag>, void>)>::Compute() const at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/debug/arm64-v8a/../../../../../../../mason_packages/headers/jni.hpp/3.0.0/include/jni/type_signature.hpp:52
Stack frame #01 pc 0000000000192efc  /lib/arm64/libmapbox-gl.so: Routine operator()<jni::jobject *, int> at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/debug/arm64-v8a/../../../../../../../mason_packages/headers/jni.hpp/3.0.0/include/jni/native_method.hpp:66
Stack frame #02 pc 0000000000185b84  /lib/arm64/libmapbox-gl.so: Routine jni::Field jni::NativeMethodMaker<jni::Object<mbgl::android::LatLng> (auto jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::LatLng> (mbgl::android::NativeMapView::*)(_JNIEnv&, float, float), &mbgl::android::NativeMapView::latLngForPixel>::operator()<mbgl::android::NativeMapView, mbgl::android::NativeMapView, void>(jni::Field<mbgl::android::NativeMapView, long> const&)::{lambda(_JNIEnv&, jni::Object<mbgl::android::NativeMapView>, float, float)#1}::*)(_JNIEnv&, {lambda(_JNIEnv&, jni::Object<mbgl::android::NativeMapView>, float, float)#1}, float, float) const>::operator()<auto jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::LatLng> (mbgl::android::NativeMapView::*)(_JNIEnv&, float, float), &mbgl::android::NativeMapView::latLngForPixel>::operator()<mbgl::android::NativeMapView, mbgl::android::NativeMapView, void>(jni::Field<mbgl::android::NativeMapView, long> const&)::{lambda(_JNIEnv&, jni::Object<mbgl::android::NativeMapView>, float, float)#1}>(char const*, auto jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::LatLng> (mbgl::android::NativeMapView::*)(_JNIEnv&, float, float), &mbgl::android::NativeMapView::latLngForPixel>::operator()<mbgl::android::NativeMapView, mbgl::android::NativeMapView, void>(jni::Field<mbgl::android::NativeMapView, long> const&)::{lambda(_JNIEnv&, jni::Object<mbgl::android::NativeMapView>, float, float)#1} const&) at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/debug/arm64-v8a/../../../../../../../mason_packages/headers/jni.hpp/3.0.0/include/jni/native_method.hpp:108
Stack frame #03 pc 0000000000209288  /lib/arm64/libmapbox-gl.so: Routine __optional_storage at /opt/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/experimental/optional:207
Stack frame #04 pc 0000000000207140  /lib/arm64/libmapbox-gl.so: Routine _ZN3jni16MakeNativeMethodIZNS_17NativeMethodMakerIMZNS_30NativePeerMemberFunctionMethodIMN4mbgl7android11CustomLayerEFvR7_JNIEnvEXadL_ZNS5_6updateES7_EEEclIS5_S5_vEEDaRKNS_5FieldIT0_lEEEUlS7_NS_6ObjectIS5_EEE_KFvS7_SJ_EJEEclISK_EESC_PKcRKT_EUlPS6_PNS_7jobjectEE_EEDaSQ_SQ_ST_PNSt6__ndk19enable_ifIXsr3std8is_classISR_EE5valueEvE4typeE at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/debug/arm64-v8a/../../../../../../../mason_packages/headers/jni.hpp/3.0.0/include/jni/native_method.hpp:49
Stack frame #05 pc 0000000000205e2c  /lib/arm64/libmapbox-gl.so: Routine __invoke at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/debug/arm64-v8a/../../../../../../../mason_packages/headers/jni.hpp/3.0.0/include/jni/native_method.hpp:110
Stack frame #06 pc 00000000002090c8  /lib/arm64/libmapbox-gl.so: Routine duration<long long, std::__ndk1::ratio<1, 1000> > at /opt/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/chrono:560
Stack frame #07 pc 0000000000156f60  /lib/arm64/libmapbox-gl.so: Routine void jni::RegisterNativePeer<mbgl::android::NativeMapView, mbgl::android::NativeMapView, std::__ndk1::unique_ptr<mbgl::android::NativeMapView, std::__ndk1::default_delete<mbgl::android::NativeMapView> > (*)(_JNIEnv&, jni::Object<mbgl::android::NativeMapView>&&, jni::Object<mbgl::android::FileSource>&&, float&&, jni::Object<jni::StringTag>&&, int&&, long&&), jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::render>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::update>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, int, int), &mbgl::android::NativeMapView::resizeView>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, int, int), &mbgl::android::NativeMapView::resizeFramebuffer>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::initializeDisplay>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::terminateDisplay>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::initializeContext>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::terminateContext>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::ObjectTag>), &mbgl::android::NativeMapView::createSurface>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::destroySurface>, jni::NativePeerMemberFunctionMethod<jni::Object<jni::StringTag> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getStyleUrl>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::setStyleUrl>, jni::NativePeerMemberFunctionMethod<jni::Object<jni::StringTag> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getStyleJson>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::setStyleJson>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::cancelTransitions>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, unsigned char), &mbgl::android::NativeMapView::setGestureInProgress>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, long), &mbgl::android::NativeMapView::moveBy>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, double, double), &mbgl::android::NativeMapView::jumpTo>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, long, double, double, unsigned char), &mbgl::android::NativeMapView::easeTo>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, long, double, double), &mbgl::android::NativeMapView::flyTo>, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::LatLng> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getLatLng>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, long), &mbgl::android::NativeMapView::setLatLng>, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::CameraPosition> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<mbgl::android::LatLngBounds>), &mbgl::android::NativeMapView::getCameraForLatLngBounds>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, unsigned char), &mbgl::android::NativeMapView::setReachability>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::resetPosition>, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getPitch>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, long), &mbgl::android::NativeMapView::setPitch>, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getZoom>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, long), &mbgl::android::NativeMapView::setZoom>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::resetZoom>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double), &mbgl::android::NativeMapView::setMinZoom>, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getMinZoom>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double), &mbgl::android::NativeMapView::setMaxZoom>, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getMaxZoom>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, double, long), &mbgl::android::NativeMapView::rotateBy>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, long), &mbgl::android::NativeMapView::setBearing>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, long), &mbgl::android::NativeMapView::setBearingXY>, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getBearing>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::resetNorth>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Array<jni::Object<mbgl::android::LatLng>, void>, jni::Object<mbgl::android::RectF>, double, long), &mbgl::android::NativeMapView::setVisibleCoordinateBounds>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, double), &mbgl::android::NativeMapView::setContentPadding>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::scheduleSnapshot>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, unsigned char), &mbgl::android::NativeMapView::enableFps>, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::CameraPosition> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getCameraPosition>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long, double, double, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::updateMarker>, jni::NativePeerMemberFunctionMethod<jni::Array<long, void> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Array<jni::Object<mbgl::android::Marker>, void>), &mbgl::android::NativeMapView::addMarkers>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, unsigned char), &mbgl::android::NativeMapView::setDebug>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::cycleDebugOptions>, jni::NativePeerMemberFunctionMethod<unsigned char (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getDebug>, jni::NativePeerMemberFunctionMethod<unsigned char (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::isFullyLoaded>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::onLowMemory>, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double), &mbgl::android::NativeMapView::getMetersPerPixelAtLatitude>, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::ProjectedMeters> (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double), &mbgl::android::NativeMapView::projectedMetersForLatLng>, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::PointF> (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double), &mbgl::android::NativeMapView::pixelForLatLng>, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::LatLng> (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double), &mbgl::android::NativeMapView::latLngForProjectedMeters>, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::LatLng> (mbgl::android::NativeMapView::*)(_JNIEnv&, float, float), &mbgl::android::NativeMapView::latLngForPixel>, jni::NativePeerMemberFunctionMethod<jni::Array<long, void> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Array<jni::Object<mbgl::android::Polyline>, void>), &mbgl::android::NativeMapView::addPolylines>, jni::NativePeerMemberFunctionMethod<jni::Array<long, void> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Array<jni::Object<mbgl::android::Polygon>, void>), &mbgl::android::NativeMapView::addPolygons>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long, jni::Object<mbgl::android::Polyline>), &mbgl::android::NativeMapView::updatePolyline>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long, jni::Object<mbgl::android::Polygon>), &mbgl::android::NativeMapView::updatePolygon>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Array<long, void>), &mbgl::android::NativeMapView::removeAnnotations>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>, int, int, float, jni::Array<signed char, void>), &mbgl::android::NativeMapView::addAnnotationIcon>, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::getTopOffsetPixelsForAnnotationSymbol>, jni::NativePeerMemberFunctionMethod<long (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getTransitionDuration>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long), &mbgl::android::NativeMapView::setTransitionDuration>, jni::NativePeerMemberFunctionMethod<long (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getTransitionDelay>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long), &mbgl::android::NativeMapView::setTransitionDelay>, jni::NativePeerMemberFunctionMethod<jni::Array<long, void> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<mbgl::android::RectF>), &mbgl::android::NativeMapView::queryPointAnnotations>, jni::NativePeerMemberFunctionMethod<jni::Array<jni::Object<mbgl::android::geojson::Feature>, void> (mbgl::android::NativeMapView::*)(_JNIEnv&, float, float, jni::Array<jni::Object<jni::StringTag>, void>, jni::Array<jni::Object<jni::ObjectTag>, void>), &mbgl::android::NativeMapView::queryRenderedFeaturesForPoint>, jni::NativePeerMemberFunctionMethod<jni::Array<jni::Object<mbgl::android::geojson::Feature>, void> (mbgl::android::NativeMapView::*)(_JNIEnv&, float, float, float, float, jni::Array<jni::Object<jni::StringTag>, void>, jni::Array<jni::Object<jni::ObjectTag>, void>), &mbgl::android::NativeMapView::queryRenderedFeaturesForBox>, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::Light> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getLight>, jni::NativePeerMemberFunctionMethod<jni::Array<jni::Object<mbgl::android::Layer>, void> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getLayers>, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::Layer> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::getLayer>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::addLayer>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::addLayerAbove>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long, int), &mbgl::android::NativeMapView::addLayerAt>, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::Layer> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::removeLayerById>, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::Layer> (mbgl::android::NativeMapView::*)(_JNIEnv&, int), &mbgl::android::NativeMapView::removeLayerAt>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long), &mbgl::android::NativeMapView::removeLayer>, jni::NativePeerMemberFunctionMethod<jni::Array<jni::Object<mbgl::android::Source>, void> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getSources>, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::Source> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::getSource>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long), &mbgl::android::NativeMapView::addSource>, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::Source> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::removeSourceById>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long), &mbgl::android::NativeMapView::removeSource>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>, int, int, float, jni::Array<signed char, void>), &mbgl::android::NativeMapView::addImage>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::removeImage>, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<mbgl::android::LatLngBounds>), &mbgl::android::NativeMapView::setLatLngBounds> >(_JNIEnv&, jni::Class<mbgl::android::NativeMapView> const&, char const*, std::__ndk1::unique_ptr<mbgl::android::NativeMapView, std::__ndk1::default_delete<mbgl::android::NativeMapView> > (*)(_JNIEnv&, jni::Object<mbgl::android::NativeMapView>&&, jni::Object<mbgl::android::FileSource>&&, float&&, jni::Object<jni::StringTag>&&, int&&, long&&), char const*, char const*, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::render>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::update>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, int, int), &mbgl::android::NativeMapView::resizeView>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, int, int), &mbgl::android::NativeMapView::resizeFramebuffer>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::initializeDisplay>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::terminateDisplay>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::initializeContext>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::terminateContext>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::ObjectTag>), &mbgl::android::NativeMapView::createSurface>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::destroySurface>&&, jni::NativePeerMemberFunctionMethod<jni::Object<jni::StringTag> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getStyleUrl>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::setStyleUrl>&&, jni::NativePeerMemberFunctionMethod<jni::Object<jni::StringTag> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getStyleJson>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::setStyleJson>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::cancelTransitions>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, unsigned char), &mbgl::android::NativeMapView::setGestureInProgress>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, long), &mbgl::android::NativeMapView::moveBy>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, double, double), &mbgl::android::NativeMapView::jumpTo>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, long, double, double, unsigned char), &mbgl::android::NativeMapView::easeTo>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, long, double, double), &mbgl::android::NativeMapView::flyTo>&&, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::LatLng> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getLatLng>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, long), &mbgl::android::NativeMapView::setLatLng>&&, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::CameraPosition> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<mbgl::android::LatLngBounds>), &mbgl::android::NativeMapView::getCameraForLatLngBounds>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, unsigned char), &mbgl::android::NativeMapView::setReachability>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::resetPosition>&&, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getPitch>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, long), &mbgl::android::NativeMapView::setPitch>&&, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getZoom>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, long), &mbgl::android::NativeMapView::setZoom>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::resetZoom>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double), &mbgl::android::NativeMapView::setMinZoom>&&, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getMinZoom>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double), &mbgl::android::NativeMapView::setMaxZoom>&&, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getMaxZoom>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, double, long), &mbgl::android::NativeMapView::rotateBy>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, long), &mbgl::android::NativeMapView::setBearing>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, long), &mbgl::android::NativeMapView::setBearingXY>&&, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getBearing>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::resetNorth>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Array<jni::Object<mbgl::android::LatLng>, void>, jni::Object<mbgl::android::RectF>, double, long), &mbgl::android::NativeMapView::setVisibleCoordinateBounds>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double, double, double), &mbgl::android::NativeMapView::setContentPadding>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::scheduleSnapshot>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, unsigned char), &mbgl::android::NativeMapView::enableFps>&&, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::CameraPosition> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getCameraPosition>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long, double, double, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::updateMarker>&&, jni::NativePeerMemberFunctionMethod<jni::Array<long, void> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Array<jni::Object<mbgl::android::Marker>, void>), &mbgl::android::NativeMapView::addMarkers>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, unsigned char), &mbgl::android::NativeMapView::setDebug>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::cycleDebugOptions>&&, jni::NativePeerMemberFunctionMethod<unsigned char (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getDebug>&&, jni::NativePeerMemberFunctionMethod<unsigned char (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::isFullyLoaded>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::onLowMemory>&&, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double), &mbgl::android::NativeMapView::getMetersPerPixelAtLatitude>&&, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::ProjectedMeters> (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double), &mbgl::android::NativeMapView::projectedMetersForLatLng>&&, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::PointF> (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double), &mbgl::android::NativeMapView::pixelForLatLng>&&, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::LatLng> (mbgl::android::NativeMapView::*)(_JNIEnv&, double, double), &mbgl::android::NativeMapView::latLngForProjectedMeters>&&, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::LatLng> (mbgl::android::NativeMapView::*)(_JNIEnv&, float, float), &mbgl::android::NativeMapView::latLngForPixel>&&, jni::NativePeerMemberFunctionMethod<jni::Array<long, void> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Array<jni::Object<mbgl::android::Polyline>, void>), &mbgl::android::NativeMapView::addPolylines>&&, jni::NativePeerMemberFunctionMethod<jni::Array<long, void> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Array<jni::Object<mbgl::android::Polygon>, void>), &mbgl::android::NativeMapView::addPolygons>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long, jni::Object<mbgl::android::Polyline>), &mbgl::android::NativeMapView::updatePolyline>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long, jni::Object<mbgl::android::Polygon>), &mbgl::android::NativeMapView::updatePolygon>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Array<long, void>), &mbgl::android::NativeMapView::removeAnnotations>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>, int, int, float, jni::Array<signed char, void>), &mbgl::android::NativeMapView::addAnnotationIcon>&&, jni::NativePeerMemberFunctionMethod<double (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::getTopOffsetPixelsForAnnotationSymbol>&&, jni::NativePeerMemberFunctionMethod<long (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getTransitionDuration>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long), &mbgl::android::NativeMapView::setTransitionDuration>&&, jni::NativePeerMemberFunctionMethod<long (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getTransitionDelay>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long), &mbgl::android::NativeMapView::setTransitionDelay>&&, jni::NativePeerMemberFunctionMethod<jni::Array<long, void> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<mbgl::android::RectF>), &mbgl::android::NativeMapView::queryPointAnnotations>&&, jni::NativePeerMemberFunctionMethod<jni::Array<jni::Object<mbgl::android::geojson::Feature>, void> (mbgl::android::NativeMapView::*)(_JNIEnv&, float, float, jni::Array<jni::Object<jni::StringTag>, void>, jni::Array<jni::Object<jni::ObjectTag>, void>), &mbgl::android::NativeMapView::queryRenderedFeaturesForPoint>&&, jni::NativePeerMemberFunctionMethod<jni::Array<jni::Object<mbgl::android::geojson::Feature>, void> (mbgl::android::NativeMapView::*)(_JNIEnv&, float, float, float, float, jni::Array<jni::Object<jni::StringTag>, void>, jni::Array<jni::Object<jni::ObjectTag>, void>), &mbgl::android::NativeMapView::queryRenderedFeaturesForBox>&&, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::Light> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getLight>&&, jni::NativePeerMemberFunctionMethod<jni::Array<jni::Object<mbgl::android::Layer>, void> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getLayers>&&, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::Layer> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::getLayer>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::addLayer>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::addLayerAbove>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long, int), &mbgl::android::NativeMapView::addLayerAt>&&, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::Layer> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::removeLayerById>&&, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::Layer> (mbgl::android::NativeMapView::*)(_JNIEnv&, int), &mbgl::android::NativeMapView::removeLayerAt>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long), &mbgl::android::NativeMapView::removeLayer>&&, jni::NativePeerMemberFunctionMethod<jni::Array<jni::Object<mbgl::android::Source>, void> (mbgl::android::NativeMapView::*)(_JNIEnv&), &mbgl::android::NativeMapView::getSources>&&, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::Source> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::getSource>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long), &mbgl::android::NativeMapView::addSource>&&, jni::NativePeerMemberFunctionMethod<jni::Object<mbgl::android::Source> (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::removeSourceById>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, long), &mbgl::android::NativeMapView::removeSource>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>, int, int, float, jni::Array<signed char, void>), &mbgl::android::NativeMapView::addImage>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<jni::StringTag>), &mbgl::android::NativeMapView::removeImage>&&, jni::NativePeerMemberFunctionMethod<void (mbgl::android::NativeMapView::*)(_JNIEnv&, jni::Object<mbgl::android::LatLngBounds>), &mbgl::android::NativeMapView::setLatLngBounds>&&) at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/debug/arm64-v8a/../../../../../../../mason_packages/headers/jni.hpp/3.0.0/include/jni/native_method.hpp:338
Stack frame #08 pc 000000000012647c  /lib/arm64/libmapbox-gl.so: Routine Method at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/debug/arm64-v8a/../../../../../../../mason_packages/headers/jni.hpp/3.0.0/include/jni/method.hpp:25
Stack frame #09 pc 0000000000089a3c  /lib/arm64/libmapbox-gl.so: Routine jni::Field jni::NativeMethodMaker<void (auto jni::NativePeerMemberFunctionMethod<void (mbgl::android::LineLayer::*)(_JNIEnv&, long, long), &mbgl::android::LineLayer::setLineBlurTransition>::operator()<mbgl::android::LineLayer, mbgl::android::LineLayer, void>(jni::Field<mbgl::android::LineLayer, long> const&)::{lambda(_JNIEnv&, jni::Object<mbgl::android::LineLayer>, long, long)#1}::*)(_JNIEnv&, {lambda(_JNIEnv&, jni::Object<mbgl::android::LineLayer>, long, long)#1}, long, long) const>::operator()<auto jni::NativePeerMemberFunctionMethod<void (mbgl::android::LineLayer::*)(_JNIEnv&, long, long), &mbgl::android::LineLayer::setLineBlurTransition>::operator()<mbgl::android::LineLayer, mbgl::android::LineLayer, void>(jni::Field<mbgl::android::LineLayer, long> const&)::{lambda(_JNIEnv&, jni::Object<mbgl::android::LineLayer>, long, long)#1}>(char const*, auto jni::NativePeerMemberFunctionMethod<void (mbgl::android::LineLayer::*)(_JNIEnv&, long, long), &mbgl::android::LineLayer::setLineBlurTransition>::operator()<mbgl::android::LineLayer, mbgl::android::LineLayer, void>(jni::Field<mbgl::android::LineLayer, long> const&)::{lambda(_JNIEnv&, jni::Object<mbgl::android::LineLayer>, long, long)#1} const&) at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/debug/arm64-v8a/../../../../../../../mason_packages/headers/jni.hpp/3.0.0/include/jni/native_method.hpp:108
Stack frame #10 pc 00000000000957c4  /lib/arm64/libmapbox-gl.so: Routine operator() at /home/jukurrpa/Projects/mapbox-gl-native/platform/android/MapboxGLAndroidSDK/.externalNativeBuild/cmake/debug/arm64-v8a/../../../../../../../mason_packages/headers/jni.hpp/3.0.0/include/jni/native_method.hpp:245
Stack frame #11 pc 0000000000026bdc  /oat/arm64/base.odex (offset 0x23000)

No sure I got it right, so here's the crash dump retrieved from the logs, just in case:

08-16 18:30:09.074 24193-24193/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-16 18:30:09.074 24193-24193/? A/DEBUG: Build fingerprint: 'google/angler/angler:8.0.0/OPP4.170623.014/4187591:user/release-keys'
08-16 18:30:09.074 24193-24193/? A/DEBUG: Revision: '0'
08-16 18:30:09.074 24193-24193/? A/DEBUG: ABI: 'arm64'
08-16 18:30:09.075 24193-24193/? A/DEBUG: pid: 24044, tid: 24044, name: s.android.debug  >>> com.myapp.android.debug <<<
08-16 18:30:09.075 24193-24193/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
08-16 18:30:09.075 24193-24193/? A/DEBUG: Cause: null pointer dereference
08-16 18:30:09.075 24193-24193/? A/DEBUG:     x0   0000007c47c327b8  x1   0000007fe5772340  x2   00000000000028f1  x3   00000000000062f8
08-16 18:30:09.075 24193-24193/? A/DEBUG:     x4   0000000000000000  x5   0000007fe5772428  x6   0000000000000000  x7   0000080300000000
08-16 18:30:09.075 24193-24193/? A/DEBUG:     x8   0000000000000002  x9   0000000c5f051e30  x10  0000000000000001  x11  0000000000000000
08-16 18:30:09.075 24193-24193/? A/DEBUG:     x12  0000000000000000  x13  0000000000000000  x14  0000000000000000  x15  0000007c47c00000
08-16 18:30:09.075 24193-24193/? A/DEBUG:     x16  0000007c49fa4888  x17  0000007c640ab3fc  x18  000000000000000d  x19  00000000000062f8
08-16 18:30:09.075 24193-24193/? A/DEBUG:     x20  0000007c47c32778  x21  0000000000000010  x22  00000000000028f1  x23  0000007c47c327b8
08-16 18:30:09.075 24193-24193/? A/DEBUG:     x24  3df765cf5b20e1da  x25  0000000000000017  x26  0000000000000000  x27  0000000000000010
08-16 18:30:09.075 24193-24193/? A/DEBUG:     x28  0000007c42fbe040  x29  0000007fe57723b0  x30  0000007c49b6ef00
08-16 18:30:09.075 24193-24193/? A/DEBUG:     sp   0000007fe5772340  pc   0000007c49b69b8c  pstate 0000000020000000
08-16 18:30:09.083 24193-24193/? A/DEBUG: backtrace:
08-16 18:30:09.083 24193-24193/? A/DEBUG:     #00 pc 000000000018db8c  /data/app/com.myapp.android.debug-F6Tv21z1uLQUJULVClg2OA==/lib/arm64/libmapbox-gl.so
08-16 18:30:09.083 24193-24193/? A/DEBUG:     #01 pc 0000000000192efc  /data/app/com.myapp.android.debug-F6Tv21z1uLQUJULVClg2OA==/lib/arm64/libmapbox-gl.so
08-16 18:30:09.083 24193-24193/? A/DEBUG:     #02 pc 0000000000185b84  /data/app/com.myapp.android.debug-F6Tv21z1uLQUJULVClg2OA==/lib/arm64/libmapbox-gl.so
08-16 18:30:09.083 24193-24193/? A/DEBUG:     #03 pc 0000000000209288  /data/app/com.myapp.android.debug-F6Tv21z1uLQUJULVClg2OA==/lib/arm64/libmapbox-gl.so
08-16 18:30:09.084 24193-24193/? A/DEBUG:     #04 pc 0000000000207140  /data/app/com.myapp.android.debug-F6Tv21z1uLQUJULVClg2OA==/lib/arm64/libmapbox-gl.so
08-16 18:30:09.084 24193-24193/? A/DEBUG:     #05 pc 0000000000205e2c  /data/app/com.myapp.android.debug-F6Tv21z1uLQUJULVClg2OA==/lib/arm64/libmapbox-gl.so
08-16 18:30:09.084 24193-24193/? A/DEBUG:     #06 pc 00000000002090c8  /data/app/com.myapp.android.debug-F6Tv21z1uLQUJULVClg2OA==/lib/arm64/libmapbox-gl.so
08-16 18:30:09.084 24193-24193/? A/DEBUG:     #07 pc 0000000000156f60  /data/app/com.myapp.android.debug-F6Tv21z1uLQUJULVClg2OA==/lib/arm64/libmapbox-gl.so
08-16 18:30:09.084 24193-24193/? A/DEBUG:     #08 pc 000000000012647c  /data/app/com.myapp.android.debug-F6Tv21z1uLQUJULVClg2OA==/lib/arm64/libmapbox-gl.so
08-16 18:30:09.084 24193-24193/? A/DEBUG:     #09 pc 0000000000089a3c  /data/app/com.myapp.android.debug-F6Tv21z1uLQUJULVClg2OA==/lib/arm64/libmapbox-gl.so
08-16 18:30:09.084 24193-24193/? A/DEBUG:     #10 pc 00000000000957c4  /data/app/com.myapp.android.debug-F6Tv21z1uLQUJULVClg2OA==/lib/arm64/libmapbox-gl.so
08-16 18:30:09.084 24193-24193/? A/DEBUG:     #11 pc 0000000000026bdc  /data/app/com.myapp.android.debug-F6Tv21z1uLQUJULVClg2OA==/oat/arm64/base.odex (offset 0x23000)

Is there a documentation on how to debug the native code along with the Android app? I'd like to see if I can gather more information this way. I enabled native debugging through Android Studio but can't get the "symbolicated" call stack nor the java call that could have caused the crash.

Edit: bonus question, is there any advantage in removing a layer from the MapboxMap when I know it's not visible (out of the camera bounds), considering the layer's Features will be kept in memory and the layer re-added when it becomes visible again?

@ericsvg
Copy link
Author

ericsvg commented Aug 22, 2017

Alright, upon further investigation on my side it seems to be caused by me calling GeoJsonSource.setGeoJson(FeatureCollection) within a Thread. I added this some time ago as this method had a tendency to freeze the UI for a short time. As I get the data for my layers in batches it made the UI choppy.

I searched for similar reported issues and it seems like this operation is not supported within a thread, but you guys are aware of the delays setGeoJson() causes. I'll be following #8484 and #8820!

@tobrun
Copy link
Member

tobrun commented Aug 22, 2017

thank you for reporting that back, you are correct that these methods should be executed from the main thread. For this we have GeoJsonSource.java annotated with@UiThread . Since this annotation is in place and issue has been figured out, I'm not seeing any next actions from our end. Closing.

@tobrun tobrun closed this as completed Aug 22, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Android Mapbox Maps SDK for Android Core The cross-platform C++ core, aka mbgl crash
Projects
None yet
Development

No branches or pull requests

2 participants