summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/loader/LibraryLoaderProviderImpl.java
blob: 9e5e72d409ca6e42a6884ee92d0f84fd4a6d91c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.mapbox.mapboxsdk.module.loader;

import com.mapbox.mapboxsdk.LibraryLoader;
import com.mapbox.mapboxsdk.LibraryLoaderProvider;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.exceptions.MapboxConfigurationException;
import com.mapbox.mapboxsdk.log.Logger;

import static com.facebook.soloader.SoLoader.init;
import static com.facebook.soloader.SoLoader.loadLibrary;

/**
 * Concrete implementation of a native library loader.
 * <p>
 * Uses ReLinker from https://github.com/KeepSafe/ReLinker.
 * </p>
 */
public class LibraryLoaderProviderImpl implements LibraryLoaderProvider {

  /**
   * Creates and returns a the default Library Loader.
   *
   * @return the default library loader
   */
  @Override
  public LibraryLoader getDefaultLibraryLoader() {
    return new SoLibraryLoader();
  }

  /**
   * Concrete implementation of a LibraryLoader using ReLinker.
   */
  private static class SoLibraryLoader extends LibraryLoader {

    private static final String TAG = "SoLibraryLoader";

    @Override
    public void load(String name) {
      try {
        // nativeExopackage = false, https://buck.build/article/exopackage.html
        init(Mapbox.getApplicationContext(), false);
        loadLibrary(name);
      } catch (MapboxConfigurationException exception) {
        Logger.e(TAG, "Couldn't load so file with relinker, application context missing, "
          + "call Mapbox.getInstance(Context context, String accessToken) first");
      }
    }
  }
}