2015-06-22 15 views
6

Ho un progetto Android (non ndk). In questo progetto collego la mia libreria nativa myLib.so. Ho compilato la mia libreria per: armeabi-v7a e x86. Quindi nella cartella jniLibs ho due cartelle con la mia lib: armeabi-v7a, x86.UnsatisfiedLinkError su Samsung S6

Quando utente esegue il mio app sul Samsung S6, ho prossimo registro blocchi:

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

Che cosa sta succedendo? perché il dispositivo a 64 bit non funziona con la mia libreria?

risposta

15

Se si dispone solo di librerie x86 e armeabi-v7a, l'app dovrebbe essere installata automaticamente in "modalità a 32 bit".

Sei sicuro di non avere un'altra libreria che includa i file .so nella cartella lib/arm64-v8a dell'APK? In tal caso verranno installate solo le librerie all'interno di questa cartella (senza la tua).

Edit: per includere solo x86 e armeabi-V7A librerie, è possibile utilizzare abiFilters:

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

Wow, ho guardato dentro apk, e in realtà vedo cartella arm64-V8A !! Perché Android lo genera per me? Come posso rimuoverlo? – Jim

+0

compila 'pl.droidsonroids.gif: android-gif-drawable: 1.1. +' Sto usando questa libreria nel mio progetto .. E sembra che questa libreria metta file .so in lib/arm64-v8a. Come faccio a bloccare che – Jim

+1

Si può fare questo: Android { .... defaultconfig { .... NDK { abiFilters "armeabi-V7A", "x86" } }} – ph0b

-3

Le librerie a 32 bit non possono essere caricate dal codice a 64 bit. È necessario compilare una versione a 64 bit della libreria o rendere l'app Java a 32 bit.

Problemi correlati