java.lang.UnsatisfiedLinkError: dalvik.système.PathClassLoader
Est-il quelqu'un qui avait de l'expérience avec cette erreur?
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/org.swig.simple-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "liborg.swig.simple.example.so"
Erreur se produit lorsque je charge la bibliothèque de cette manière.
static {
System.loadLibrary("example");
}
Je suis sûr que l'exemple de la classe est exister dans le dossier en cours.
Vous devez vous connecter pour publier un commentaire.
Veuillez noter qu'il y a une convention de nommage. Votre lib doit être appelée libexample.donc .
LoadLibrary("exemple") va chercher libexample.donc.
L' .si la bibliothèque doit être à l'intérieur de l'apk dans le répertoire lib du dossier (puisque vous développez pour Android, il doit être dans le répertoire lib/armeabi et lib/armeabi-v7a dossiers - pourquoi les deux dossiers ? certaines versions d'Android regarder dans lib/armeabi et un certain regard dans lib/armeabi-v7a ... soi ce qui fonctionne pour vous ).
D'autres choses à surveiller :
assurez-vous de compiler pour la bonne architecture (si vous compilez pour armeabi v5 il ne fonctionnera pas sur armeabiv7 ou armeabiv7s ).
assurez-vous que votre exporté prototypes sont utilisés dans la bonne catégorie (cochez la bonjour jni exemple. Votre exposé des fonctions doivent ressembler à quelque chose comme Java_mypackagename_myjavabridgeclass_myfunction).
Par exemple, la fonction Java_com_example_sample_hello traduira dans la classe java com.exemple.exemple , la fonction bonjour.
Cela m'a aidé. Partager pour quelqu'un qui pourrait venir avec le même problème.
Je suis actuellement en train de travailler sur une application Android qui diffuse la radio. J'utilise décodeur natif de la bibliothèque qui est appelé aacdecoder. Tout allait bien jusqu'application se crash d'erreur sur certains appareils Android. C'était vraiment ennuyeux. Parce que l'app a été parfaitement joue des flux radio presque tous les périphériques, mais Samsung S6 et S6 Edge.
Rapport de Crash dit que
Comme vous voyez que le crash est dire qu'il n'a pas pu charger la bibliothèque native. Mais pourquoi? Tout d'abord, j'ai vérifié ma structure, Si la bibliothèque native .les fichiers situés correctement.
Semble que tout était ok sauf que ce fou d'erreur. Puis, après quelques recherches, j'ai trouver que certains appareils android a de processeurs 64 bits. Ces dispositifs génère et vérifier arm64 dossier à charge de la bibliothèque native. C'était le problème. Parce que mon projet n'a pas arm64 dossier. Voici la solution;
Vous devez ajouter des filtres(abiFilters) à votre application du module de construire.gradle fichiers. Ainsi, lorsque votre appareil, essayez d'exécuter votre application, il va vérifier gradle fichier et comprend qu'il ne doit pas générer n'importe quel dossier et utiliser les natifs des ressources de la bibliothèque. Boom, presque résolu. Mais il ya encore une chose de plus.
Ajoutez cette ligne à votre gradle.propriétés à utiliser obsolète Ndk.
Enfin mon application fonctionne sur S6 et S6 Edge. Je veux dire qu'il fonctionne sur tous les appareils qui a de nouveaux processeurs 64 bits.
Ce qui a fonctionné pour moi a été de placer les jniLibs dossier sous le "principal" le dossier, juste à côté du "java" et "res" des dossiers, par exemple du projet -> app -> src -> main -> jniLibs
J'ai eu toutes les bibliothèques avec les bons noms et chacun placé sur leur architecture sous-dossier, mais j'ai toujours eu la même exception; même essayé beaucoup d'autres réponses comme la accepté de répondre ici, la compilation d'un BOCAL avec de l' .donc, libs, d'autres le placement de la jniLibs dossier, etc.
Pour ce projet, j'ai dû utiliser Gradle 2.2 et Android Plugin 1.1.0 sur Android Studio 1.5.1
-si gradle.propriétés pas disponible, alors tout d'abord ajouter ce fichier et
ajouter
android.useDeprecatedNdk=true
-utilisez ce code dans la construction.gradle
`
J'utilise Android Studio 3.0 et rencontrer ce problème.
Et je suis sûr que de l'appli de construire.gradle est OK.
Aller à Exécuter -> Modifier les Configurations -> Profilage, et de le désactiver et Activer le profilage avancé".
Cela fonctionne pour moi.
Référence de réponse
C'est travaillé pour moi
Si votre avoir .donc fichier dans armeabi parle de l'intérieur de ndk que seul dossier.
et ensuite utiliser cette
dans gradle.fichier de propriétés
Quelques vieux gradle outils ne peut pas copier .donc les fichiers dans le dossier de génération en quelque sorte, manuellement copier ces fichiers dans le dossier de la version ci-dessous peut résoudre le problème:
construire config: beta/production/s'asseoir/uat
architecture de soutien: armeabi/armeabi-v7a/mips/x86
Si vous utilisez Android studio, il suffit d'éditer le gradle.propriétés dans le dossier racine et ajouter android.useDeprecatedNdk=true. Puis modifier le build.gradle fichier de votre application, dossier, ensemble abiFilters comme ci-dessous:
Ce qui m'a aidé à enregistrer le répertoire source pour la jni fichiers dans la construction.gradle fichier.
Ajoutez ceci à votre gradle fichier:
Si vous utilisez le module avec du code c++ et ont le même problème que vous pourriez essayer
Build -> Refresh Linked C++ Projects
Aussi, vous devez ouvrir un fichier à partir de ce module et ne
Build -> Make module "YourNativeLibModuleName"
Encore un autre crash cause et solution possible est décrit dans cet article:
https://medium.com/keepsafe-engineering/the-perils-of-loading-native-libraries-on-android-befa49dce2db
Brièvement:
dans la construction.gradle
dans le code
System.loadLibrary
charge une bibliothèque partagée à partir delib
dossier.Qu'entendez-vous en disant "je suis sûr que l'exemple de la classe est exister dans le dossier en cours"?
Vous devriez mettre votre .donc, bibliothèque de
lib
dossier.Pour moi le problème a été en NDK_ROOT pas définies.
Vérifier votre console si:
NDK_ROOT = None
[!] NDK_ROOT pas défini. Veuillez définir NDK_ROOT dans votre environnement ou en local.propriétés
Vérifiez si vous avez paramétré:
Ce pourrait être liée au dispositif problème.
J'ai été faire cette erreur dans MI appareils, le code a été de travailler avec tous les autres appareils.
Ce qui pourrait aider: