Android charge native de la bibliothèque
Je suis en train de charger une bibliothèque que j'ai construit avec la version autonome du NDK de la chaîne d'.
J'ai construit libGLmove.donc, et l'a placé dans libs/armeabi de mon projet Eclipse
Toutefois, l'appel à System.loadLibrary("GLmove")
jette un UnsatisfiedLinkError
Des idées sur la façon de résoudre le problème ou de le faire Android trouver ma bibliothèque?
Comment est-ndk-build paquet de la bibliothèque après qu'il l'a construit?
Edit: exact de compiler des indicateurs sont:
/Users/thomas/Documents/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/darwin-x86/bin/arm-eabi-g++ --sysroot=/Users/thomas/Documents/android-ndk-r5b/plates-formes/android-8/arch-bras -mars=armv7-a-mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8 -fno-exceptions -fno-rtti -nostdlib -fpic -shared-o GLmove.soi-O3
OriginalL'auteur Prime | 2011-06-02
Vous devez vous connecter pour publier un commentaire.
Avez-vous vérifié dans le fichier .Fichier APK (utiliser un utilitaire zip à regarder/désarchiver) pour voir si votre bibliothèque fait par le biais de l'emballage? Je suis un peu méfiant qu'il ne pourrait pas, parce que je remarque que tout ce qui se construit dans le "libs" dans le dossier du projet et sur ma machine de compilation va dans un dossier appelé "lib" (pas de "s") dans le APK.
Je ne serais pas trop surpris si il s'est avéré que l'Éclipse processus de construction n'est pas empaqueter tout bibliothèques, il ne le sait pas. C'est, bien sûr, à la différence de ce qui se passe avec les ressources, qui vient de se faire emballer par la vertu d'être à la bonne place.
Si vous trouvez votre bibliothèque n'est pas dans votre fichier APK, je ne pense pas que vous pouvez simplement mettre manuellement dans là, puisqu'il n'apparaît pas dans le manifeste du package et va casser de sa signature.
Vous ne mentionnez pas si oui ou non votre projet Eclipse est un NDK projet (clic droit sur le projet, Android Outils->Ajouter le Support Natif.) Si non, je suppose que vous aurez besoin de le faire en un seul et ajouter ensuite votre bibliothèque pour Android.mk fichier en tant que dépendance et non pas une cible.
Ou: vous pouvez essayer de mettre votre bibliothèque dans /res dans le projet et l'utilisation du Système.load() au lieu de Système.loadLibrary() pour le charger. Je vais vous avouer que je n'ai jamais essayé moi-même, tho.
merci beaucoup pour la réponse! Je suis passé par l'APK après la décompression et il est inclus, je n'ai pas l'Android Outils->Ajouter le Support Natif de l'option dans Eclipse. Pourquoi est-ce? Je viens de mettre à jour le guide de l'Aide->Vérifier les Mises à jour
Pouvez-vous installer votre application sur un émulateur? Si oui, le faire, puis aller à un DDMS vue dans eclipse, sélectionnez l'émulateur de périphérique et "Explorateur de Fichiers" et regarder dans: /data/data/votre.package.nom/lib. Votre bibliothèque?
oui, il s'installe sur un émulateur et est situé dans ce répertoire. son nom de libglmove.. J'ai essayé un appel Système.loadLibrary("glmove"); et d'obtenir la même erreur
OriginalL'auteur jimkberry
J'ai été en cours d'exécution dans ce même problème. Les choses que j'avais tort.
Java_com_my_namespace_libname_activity_methodName(JNIEnv* env, jobject _this) {
//Fancy Native Junk Here
}
Une fois que j'ai fixé ces deux choses, re-couru ndk-build et actualisé le projet eclipse avec la touche F5, il a commencé à travailler.
Je ne sais pas si c'est le cas ou non. Je pense, sauf si un autre fichier est défini le compilateur pourrait utiliser Android.mk fichier, mais c'est peut-être juste une mauvaise prise en charge, par moi.
OriginalL'auteur zznq
Vous ne donnez pas très bien des détails, mais il se peut que le
.so
vous avez construit s'appuie sur une bibliothèque qui n'est pas disponible sur la version de téléphone que vous utilisez.Je n'en ai pas trouvé moyen de dire le NDK qui Android SDK de la version que vous ciblez donc n'ont pas d'idée très claire de la façon dont ce côté de cela devrait fonctionner, mais il semble qu'il serait facile de le mettre dans une dépendance d'une nouvelle version du SDK dans votre
.so
de sorte qu'il ne se charge pas sur tous les téléphones.OriginalL'auteur KayEss
Pourriez vous s'il vous plaît vérifier la syntaxe et l'emplacement du Système.loadLibrary("GLmove")
le Système.loadLibrary appel doit être statique dans le bloc du fichier source de Java
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jniexamp.html
OriginalL'auteur Shrenik
Si votre bibliothèque native besoins des autres bibliothèques que vous aurez besoin de les charger en premier. Si cela ne fonctionne pas, vérifiez que votre répertoire de projet ne contient pas d'espaces.
Aussi, vous pouvez trouver ce tutoriel utile: http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/
OriginalL'auteur Ed Burnette