Android studio: UnsatisfiedLinkError: findLibrary retourné null - chargement de la bibliothèque native
Je fais une application dans Android Studio qui utilise deux bibliothèques. Une bibliothèque native avec un Android wrapper et un pot-de la bibliothèque.
Pour une raison quelconque, le natif de la bibliothèque ne se charge pas si l'autre jar-bibliothèque est compilée dans le projet. Donc, si je lance l'application avec seulement la bibliothèque native, tout fonctionne bien. J'ai ajouter les autres pot-de la bibliothèque de mon gradle-fichier et boom... un UnsatisfiedLinkError:
java.lang.UnsatisfiedLinkError: Couldn't load MobileOcrEngine from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.app-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.app-1, /vendor/lib, /system/lib]]]: findLibrary returned null
Mon appli fonctionne très bien lorsque j'utilise ceci:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'src/main/jniLibs')
compile 'com.android.support:support-v13:21.0.2'
compile project(':wheel')
}
L'erreur se produit lorsque j'essaie:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'src/main/jniLibs')
compile 'com.android.support:support-v13:21.0.2'
compile project(':wheel')
compile files('libs/realm-0.78.0.jar')
}
ou quand j'essaie d'utiliser la même bibliothèque, mais en utilisant le repository Maven:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'src/main/jniLibs')
compile 'com.android.support:support-v13:21.0.2'
compile project(':wheel')
compile 'io.realm:realm-android:0.78.0'
}
ou si j'essaie de mettre le pot dans jniLibs dossier:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'src/main/jniLibs')
compile 'com.android.support:support-v13:21.0.2'
compile project(':wheel')
}
Je n'ai aucune idée de l'endroit où la racine du problème se trouve. Avec l'une des deux bibliothèques, Android Studio ou suis-je en train de faire quelque chose de mal?
Remarque:
Je sais qu'il y a eu de nombreuses questions sur StackOverflow concernant UnsatisfiedLinkErrors, pourtant, aucune de ces fournir des solutions pour mon problème. Je n'ai pas de problème de chargement de la bibliothèque native si c'est la seule bibliothèque-je utiliser...
OriginalL'auteur Skywalker10 | 2015-01-26
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé le problème. L'autre pot que je voulais ajouter utilise en interne une bibliothèque C++ avec le soutien de
armeabi
,armeabi-v7a
,x86
etmips
. La bibliothèque native j'ai été en utilisant tout ce temps pris en charge uniquementarmeabi
.L'appareil que j'utilise pour les tests est une armeabi-v7a appareil. Tout ce temps où j'ai été en utilisant la bibliothèque native, l'appareil vérifié pour la bibliothèque, de la armeabi-v7a de mon répertoire libs. Si elle ne pouvait pas le trouver là, qu'il allait essayer de la armeabi répertoire.
Lorsque je charge l'autre pot avec support pour 4 architectures différentes, l'appareil charge le armeabi-v7a de la bibliothèque. Comme il a trouvé un armeabi-v7a bibliothèque pour le pot, il va essayer de charger la bibliothèque native pour la même architecture. Si la bibliothèque n'était pas trouvé, il ne vérifiera pas la armeabi répertoire de sauvegarde, de sorte que le
findLibrary
renvoie la valeur null, et donc laUnsatisfiedLinkError
.Je l'ai résolu en faisant un répertoire pour le armeabi de l'architecture et de la copie de l' .donc-bibliothèque de l'armeabi-v7a répertoire.
Dans votre jniLibs répertoire, ont un sous-répertoire pour les deux armeabi et armeabi-v7a. Copie de votre bibliothèque, de sorte qu'il apparaît à la fois dans l'architecture (armeabi et armeabi-v7a) répertoires.
Très bien..! A fonctionné pour moi.. Merci beaucoup..
OriginalL'auteur Skywalker10
OriginalL'auteur Pratik