1

I am building a gps application wherein I am using Graphhopper and oscim to display a map offline.(the graphhopper demo app) Now I want to add a Mapbox map for online use as well.

The problem is that when I add the dependency, the offline map gets and unsatisfiedLinkError.

I'm adding the following dependency:

    compile ('com.mapbox.mapboxsdk:mapbox-android-sdk:4.2.1@aar'){
    transitive=true
}

The UnsatisfiedLinkError occurs when calling the following code:

mapView = new MapView(findViewById(R.id.mapFrame).getContext());

Then the error occurs when MapView.java reaches:

    static {
    System.loadLibrary("vtm-jni");
}

I was wondering if there was any way to seperate the dependency from the offline intent. If not, what would be the best way to solve this problem?

This is the full`

java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader[DexPathList[[dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-vtm-themes-0.6.0_d4ea6029b271e3632fdd2016f0824e43bdb5da7c-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-vtm-jts-0.6.0_8e3803a52cc3fa121610209e5254ed034bf66895-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-vtm-android-0.6.0_eaa608806b597a366d99fbc22fc8179bc936b092-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-vtm-0.6.0_fd38ca773ed7a50fe51ad1ccda9869bcf19c67fb-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-support-annotations-25.1.0_171a4e085c19b0851022189020c656046217703b-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-slf4j-api-1.7.21_1fbbbcda9dab9dadeb23700ebd4b01906b50ae3f-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-slf4j-android-1.7.21_b34f2a4bb3bfa9b1ac33ac22d7fcb0374657f88a-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-retrofit-2.1.0_b94b8d600976dfd2ff5d67b2532623bde1cb5e9c-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-retrofit-1.9.0_65f9db5026246b2347373bb7b60ad7465faf2c70-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-okio-1.9.0_e526b97dc760791833c22bd66fc81f022dc7a2e1-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-okhttp-3.4.1_1f5f3a4c929bfa49d4eb1576ee517525e63b21be-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-okhttp-2.4.0_c031759e5c616edc45c27f6b812e2e75723e9ad3-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-mapbox-java-services-1.3.1_629a76e6e71651aa6f7136d5f15a7847744022df-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-logging-interceptor-3.3.1_bd08ce14d90716249d09bf5b41d77ba6aad8aedb-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-ln-1.1.1_5d9adb3b179087959a6f99aafe2f378babfe80d8-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-kotlin-stdlib-1.0.1_d65354731d0caa53d054fecec7c26139429586dc-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-kotlin-runtime-1.0.1_4093965dbac4d4f7c190062f33637a398a50bb5f-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-jts-1.13_7f96c6f1e3c89ebc0f15d894d32ee31bd1aa969d-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-hppc-0.7.2_6504454feae34f31f7a576176894526e8cc06c97-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-gson-2.7_de75b54aef4a1c557e4dfd8ef75b85922e39b989-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-graphhopper-core-0.9-SNAPSHOT_41321dc69b3acaf2b13a1ef67078bcd88cd9656b-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-converter-gson-2.1.0_f44d61624770995a3a71b46bfc106c176698ddc7-c
01-25 10:55:28.358 22869-22869/com.novinav.novi E/AndroidRuntime: lasses.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-commons-io-1.3.2_0794a4a04fbbe96e63821d966540acbc9c6a2fd5-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.mapzen-on-the-road-1.1.1_487b1e1827d91eb0b1afe3cc429a382629ed8c7e-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.mapbox.mapboxsdk-mapbox-android-sdk-4.2.1_3baa5fdb8d43d68ddac28d4daeac998ee98abcbd-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.google.android.gms-play-services-tasks-10.0.1_2debcb2a7b77885fd63e990d2d202d4dfceb458e-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.google.android.gms-play-services-maps-10.0.1_2eb81b4131d030c11dccc5fed22fa8dd045b0fd4-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.google.android.gms-play-services-basement-10.0.1_dfd68d63ca9416aaa4e8b448ab60854333c629bb-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.google.android.gms-play-services-base-10.0.1_3982bc26157547837dbd0aa2066b0aaf9634ed6f-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.android.support-transition-25.1.0_2df94b64a8067aeff34127bff6582828f23ffb43-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.android.support-support-vector-drawable-25.1.0_a852efb8652464f0976d2b2c1afb4a6e538c8fba-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.android.support-support-v4-25.1.0_d6e3d8477e48eecdeaaf9b8832b3c279e2609af6-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.android.support-support-media-compat-25.1.0_9f5b3b32b83f7dbe6d287571a5739699d85e8a41-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.android.support-support-fragment-25.1.0_546bd646c41fce53249a0ae8bda7fe4e26edc67c-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.android.support-support-core-utils-25.1.0_f7f65a8a9e6a2f52d908c1ee862d57e650ba0c83-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.android.support-support-core-ui-25.1.0_52ea6de4c5bbd0375f70e8d6ebc015b8ce8f9f13-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.android.support-support-compat-25.1.0_3d51e353f451195fd55d15ec9eb7246804f17989-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.android.support-recyclerview-v7-25.1.0_5ac0dea7dd9889eabfa40a7aa8db90d67d84c500-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.android.support-design-25.1.0_34ab058d60232acb74f76a257aa8717bdaba76ea-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.android.support-appcompat-v7-25.1.0_b2b37eff518f819c88fc6d87258ebedd58bb658f-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-com.android.support-animated-vector-drawable-25.1.0_bcee292d33e337afbe263714bde296803388c152-classes.dex", dex file "/data/data/com.novinav.novi/files/instant-run/dex/slice-androidsvg-1.2.2-beta-1_521a04e889332c99176ba61fd7ee1d1b48936948-classes.dex"],nativeLibraryDirectories=[/data/app/com.novinav.novi-2/lib/arm64, /data/app/com.novinav.novi-2/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libvtm-jni.so"`

This is the gradle file:

`apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.1"
    defaultConfig {
        applicationId "com.novinav.novi"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

repositories{
    mavenCentral()
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.1.0'
    testCompile 'junit:junit:4.12'

    compile(group: 'com.graphhopper', name: 'graphhopper-core', version: '0.9-SNAPSHOT') {
        exclude group: 'com.google.protobuf', module: 'protobuf-java'
        exclude group: 'org.openstreetmap.osmosis', module: 'osmosis-osm-binary'
        exclude group: 'org.apache.xmlgraphics', module: 'xmlgraphics-commons'

    }
    compile ('com.mapbox.mapboxsdk:mapbox-android-sdk:4.2.1@aar'){
        transitive=true
        exclude group:'com.mapzen.android',module:'lost'
    }
    compile 'org.mapsforge:vtm:0.6.0'
    compile 'org.mapsforge:vtm-android:0.6.0'
    compile 'org.mapsforge:vtm-android:0.6.0:natives-armeabi'
    compile 'org.mapsforge:vtm-android:0.6.0:natives-armeabi-v7a'
    compile 'org.mapsforge:vtm-android:0.6.0:natives-x86'
    compile 'org.mapsforge:vtm-jts:0.6.0'
    compile 'org.mapsforge:vtm-themes:0.6.0'
    compile 'com.caverock:androidsvg:1.2.2-beta-1'
    compile 'com.vividsolutions:jts:1.13'

    compile 'org.slf4j:slf4j-api:1.7.21'
    compile 'org.slf4j:slf4j-android:1.7.21'

    compile 'com.android.support:appcompat-v7:25.1.0'

    compile 'com.google.android.gms:play-services-maps:10.0.1'
    compile 'com.android.support:design:25.1.0'

    compile 'com.mapzen:on-the-road:1.1.1'


}`
Kenneth Breugelmans
  • 501
  • 1
  • 8
  • 22
  • That `MapView` is coming from Graphhopper? – zugaldia Jan 24 '17 at 18:29
  • Yes, thats the MapView from the Graphhopper demo app – Kenneth Breugelmans Jan 24 '17 at 20:00
  • What is the stacktrace? And when you are using the demo app its classes you need also mapsforge/vtm as dependency or just get rid of this if you use an alternative (oscim) – Karussell Jan 25 '17 at 08:34
  • @Karussell I' have added the full error to the original post. I also have added my gradle dependencies. I don't want to get rid of the mapsforge/vtm sources becuase I want to use those when I don't have any internet available. (not using oscim anymore btw.) – Kenneth Breugelmans Jan 25 '17 at 09:56
  • When you use the original Android demo from GraphHopper is this working for you? If yes, couldn't you iterate from there? – Karussell Jan 25 '17 at 13:52

1 Answers1

0
  1. open the parent-vtm and copy the vtm-android/natives in your project.
  2. add folowing code in build.gradle
android {  
...      
    sourceSets {
        main {
            file("natives").eachDir() { dir ->
                jniLibs.srcDirs += "${dir.path}/lib"
            }
        }
    }
}
Ivar
  • 6,138
  • 12
  • 49
  • 61