From 5fe98da757b62f3c0034430a6632926b1262adb7 Mon Sep 17 00:00:00 2001 From: Antonio Zugaldia Date: Fri, 6 Oct 2017 16:30:15 -0400 Subject: provide a fallback method to load the native library --- .../java/com/mapbox/mapboxsdk/LibraryLoader.java | 27 ++++++++++++++++++++-- .../com/mapbox/mapboxsdk/maps/NativeMapView.java | 3 ++- .../mapboxsdk/net/NativeConnectivityListener.java | 3 ++- .../mapbox/mapboxsdk/offline/OfflineManager.java | 3 ++- .../mapbox/mapboxsdk/offline/OfflineRegion.java | 3 ++- 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java index 8a75176ccd..65f8eec03b 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java @@ -1,15 +1,38 @@ package com.mapbox.mapboxsdk; +import android.content.Context; + +import java.io.File; + /** * Centralises the knowledge about "mapbox-gl" library loading. */ public class LibraryLoader { + private static final String LIBRARY_NAME = "libmapbox-gl.so"; + /** * Loads "libmapbox-gl.so" native shared library. + * @param context The application context */ - public static void load() { - System.loadLibrary("mapbox-gl"); + public static void load(Context context) { + try { + System.loadLibrary("mapbox-gl"); + } catch (UnsatisfiedLinkError error) { + if (context != null) { + System.load(getLibraryLocation(context).getAbsolutePath()); + } + } } + /** + * Returns a file in the app internal storage that may contain a locally cached copy + * of the Mapbox native library. + * + * @param context The application context + * @return a file object + */ + public static File getLibraryLocation(Context context) { + return new File(context.getFilesDir(), LIBRARY_NAME); + } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java index 3ce6aab581..176e8cb2b4 100755 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java @@ -11,6 +11,7 @@ import android.text.TextUtils; import android.util.DisplayMetrics; import com.mapbox.mapboxsdk.LibraryLoader; +import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.annotations.Icon; import com.mapbox.mapboxsdk.annotations.Marker; import com.mapbox.mapboxsdk.annotations.Polygon; @@ -62,7 +63,7 @@ final class NativeMapView { private MapboxMap.SnapshotReadyCallback snapshotReadyCallback; static { - LibraryLoader.load(); + LibraryLoader.load(Mapbox.getApplicationContext()); } // diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/NativeConnectivityListener.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/NativeConnectivityListener.java index ae74859228..79816fe27b 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/NativeConnectivityListener.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/NativeConnectivityListener.java @@ -1,6 +1,7 @@ package com.mapbox.mapboxsdk.net; import com.mapbox.mapboxsdk.LibraryLoader; +import com.mapbox.mapboxsdk.Mapbox; /** * Updates the native library's connectivity state @@ -8,7 +9,7 @@ import com.mapbox.mapboxsdk.LibraryLoader; class NativeConnectivityListener implements ConnectivityListener { static { - LibraryLoader.load(); + LibraryLoader.load(Mapbox.getApplicationContext()); } private long nativePtr; diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java index 130284e88d..1c18adfe45 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java @@ -7,6 +7,7 @@ import android.os.Looper; import android.support.annotation.NonNull; import com.mapbox.mapboxsdk.LibraryLoader; +import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.R; import com.mapbox.mapboxsdk.geometry.LatLngBounds; import com.mapbox.mapboxsdk.net.ConnectivityReceiver; @@ -27,7 +28,7 @@ public class OfflineManager { // static { - LibraryLoader.load(); + LibraryLoader.load(Mapbox.getApplicationContext()); } // Native peer pointer diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java index f210729037..6a7857469e 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java @@ -7,6 +7,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.mapbox.mapboxsdk.LibraryLoader; +import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.storage.FileSource; import java.lang.annotation.Retention; @@ -24,7 +25,7 @@ public class OfflineRegion { // static { - LibraryLoader.load(); + LibraryLoader.load(Mapbox.getApplicationContext()); } // Members -- cgit v1.2.1