2015-06-22 18 views
6

Mam projekt Androida (nie ndk). W tym projekcie łączę moją własną bibliotekę natywną myLib.so. Skompilowałem moją bibliotekę dla: armeabi-v7a i x86. Tak więc w folderze jniLibs mam dwa foldery z moją biblioteką: armeabi-v7a, x86.NiezadowolonyLinkError na Samsung S6

Gdy użytkownik uruchamia aplikację na mój Samsung S6, mam kolejny dziennik awarii:

> 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) 

co się dzieje? dlaczego urządzenie 64-bitowe nie działa z moją biblioteką?

Odpowiedz

15

Jeśli masz tylko biblioteki x86 i armeabi-v7a, Twoja aplikacja powinna automatycznie zostać zainstalowana w "trybie 32-bitowym".

Czy na pewno nie masz innej biblioteki, która zawierałaby pliki .so znajdujące się w folderze APK lib/arm64-v8a? W takim przypadku tylko biblioteki znajdujące się w tym folderze zostaną zainstalowane (bez twojego).

Edycja: aby uwzględnić tylko x86 i armeabi-v7a bibliotekami można użyć abiFilters:

android { 
    .... 
    defaultConfig { 
     .... 
     ndk { 
      abiFilters "armeabi-v7a", "x86" 
     } 
    } 
} 
+0

Wow, zajrzałem do środka apk i faktycznie widzę folderu arm64-V8A !! Dlaczego Android generuje to dla mnie? Jak mogę go usunąć? – Jim

+0

skompiluj 'pl.droidsonroids.gif: android-gif-drawable: 1.1. +' Używam tej biblioteki w moim projekcie. I wygląda na to, że ta biblioteka umieściła pliki .so w lib/arm64-v8a. Jak mogę zablokować że – Jim

+1

Można to zrobić: Android { .... defaultConfig { .... NDK { abiFilters "armeabi-v7a", "x86" } } } – ph0b

-3

32-bitowych bibliotek nie można załadować z kodu 64-bitowego. Musisz skompilować 64-bitową wersję swojej biblioteki lub ustawić 32-bitową aplikację Java.

Powiązane problemy