UnsatisfiedLinkError on Samsung S6

2.6k views Asked by At

I have Android project (not ndk). In this project i'm linking my own native library myLib.so. I compiled my library for: armeabi-v7a and x86. So in jniLibs folder I have two folders with my lib: armeabi-v7a, x86.

When user runs my app on Samsung S6, i have next crash log:

> java.lang.UnsatisfiedLinkError:
> dalvik.system.PathClassLoader[DexPathList[[zip file
> "/data/app/com.mycompany.test-2/base.apk"],nativeLibraryDirectories=[/data/app/com.mycompany.test-2/lib/arm64,
> /vendor/lib64, /system/lib64]]]


> couldn't find "myLib.so" at java.lang.Runtime.loadLibrary(Runtime.java:366) at
> java.lang.System.loadLibrary(System.java:989)

Whats going on ? why 64 bit device not running with my lib ?

2

There are 2 answers

5
ph0b On BEST ANSWER

If you have only x86 and armeabi-v7a libraries, your app should automatically be installed in "32-bit mode".

Are you sure you don't have another library that would include .so files inside your APK's lib/arm64-v8a folder? In that case only the libs inside this folder will get installed (without yours).

Edit: to include only x86 and armeabi-v7a libs, you can use abiFilters:

android {
    ....
    defaultConfig {
        ....
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }
}
0
Dan Albert On

32-bit libraries cannot be loaded from 64-bit code. You need to compile a 64-bit version of your library or make your Java app be 32-bit.