UnsatisfiedLinkError on Samsung S6
Asked Answered
A

2

6

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 ?

Ammadas answered 22/6, 2015 at 17:38 Comment(0)
S
16

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"
        }
    }
}
Seneca answered 23/6, 2015 at 5:51 Comment(5)
Wow, i looked inside apk, and actually I see folder arm64-v8a !! Why android generate that for me ? How can I remove it ?Ammadas
compile 'pl.droidsonroids.gif:android-gif-drawable:1.1.+' I'm using this library in my project..And looks like this library put .so files in lib/arm64-v8a. How can i block thatAmmadas
You can do this: android { .... defaultConfig { .... ndk { abiFilters "armeabi-v7a", "x86" } } }Seneca
This answer worked, but I also had to add android.useDeprecatedNdk=true to the gradle.properties file in my app's root folder.Regorge
In our case 64-bit library turned out to be a Realm database. So, beware of that.Allocution
W
-3

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.

Weirick answered 22/6, 2015 at 23:10 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.