From a1aed6f095c6326fa9c8a8ecff591c5a03144070 Mon Sep 17 00:00:00 2001 From: Antonio Zugaldia Date: Mon, 9 Oct 2017 10:07:09 -0400 Subject: Provide a fallback method to load the native library (#10154) * provide a fallback method to load the native library * move context call inside loader to avoid changing method signature --- .../java/com/mapbox/mapboxsdk/LibraryLoader.java | 28 +++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) 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..35b1e7cf6a 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,41 @@ package com.mapbox.mapboxsdk; +import android.content.Context; + +import java.io.File; + +import timber.log.Timber; + /** * 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. */ public static void load() { - System.loadLibrary("mapbox-gl"); + try { + System.loadLibrary("mapbox-gl"); + } catch (UnsatisfiedLinkError error) { + Context context = Mapbox.getApplicationContext(); + if (context != null) { + Timber.d("Loading %s from internal storage.", LIBRARY_NAME); + 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); + } } -- cgit v1.2.1