2015-06-22 16 views
6

Ich habe Android-Projekt (nicht ndk). In diesem Projekt verbinde ich meine eigene native Bibliothek myLib.so. Ich kompilierte meine Bibliothek für: armeabi-v7a und x86. Also in jniLibs Ordner habe ich zwei Ordner mit meinem lib: armeabi-v7a, x86.UnbefriedigterLinkError auf Samsung S6

Wenn Benutzer meine Anwendung auf Samsung S6 läuft, ich habe log nächste Crash:

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

, was los ist? Warum 64-Bit-Gerät nicht mit meiner Lib läuft?

Antwort

15

Wenn Sie nur x86- und armea-v7a-Bibliotheken haben, sollte Ihre App automatisch im "32-Bit-Modus" installiert werden.

Sind Sie sicher, dass Sie keine andere Bibliothek haben, die .SO-Dateien in Ihrem APK-Ordner lib/arm64-v8a enthalten würde? In diesem Fall werden nur die Bibliotheken in diesem Ordner installiert (ohne Ihre).

Edit: nur x86 und armeabi-V7A Libs gehören, können Sie abiFilters verwenden:

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

Wow, sah ich in apk, und ich sehe eigentlich Ordner arm64-V8A !! Warum Android das für mich generieren? Wie kann ich es entfernen? – Jim

+0

kompilieren 'pl.droidsonroids.gif: android-gif-drawable: 1.1. +' Ich benutze diese Bibliothek in meinem Projekt..Und sieht aus wie diese Bibliothek .so Dateien in lib/arm64-v8a. Wie kann ich blockieren, dass – Jim

+1

Sie können dies tun: android { .... DefaultConfig { .... NDK { abiFilters "armeabi-V7A", "x86" } } } – ph0b

-3

32-Bit-Bibliotheken können nicht aus 64-Bit-Code geladen werden. Sie müssen eine 64-Bit-Version Ihrer Bibliothek kompilieren oder Ihre Java-Anwendung zu 32-Bit machen.