kaloskagatos Posté(e) 7 février 2011 Share Posté(e) 7 février 2011 C'est pas le problème des .o ;) Tu dois compiler toute la lib wiiuse http://sourceforge.net/projects/wiiuse/files/wiiuse/v0.12/ en même temps que wiiusej_WiiUseApi.c , fais un makefile qui compile tout. Dans le projet WiiuseJ, la lib wiiuse est déjà compilée libwiiuse.so et wiiusej_WiiUseApi.c dans libWiiuseJ.so mais toi tu peux tout compiler en une seule lib. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Droiide Posté(e) 7 février 2011 Auteur Share Posté(e) 7 février 2011 (modifié) Ayé j'ai réussi :) Maintenant passons à unresolved symbol... ça aussi apparement c'est fait. Donc là tout est compilé. Ce soir je ferais la partie Java et je vous tiendrais donc au courant de l'évolution (ou des problémes) ^^ Merci beaucoup :) Modifié 8 février 2011 par Droiide Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Droiide Posté(e) 8 février 2011 Auteur Share Posté(e) 8 février 2011 C'est bizzare encore une fois. J'essaye de lancer une methode se trouvant dans le .c et une erreur me dit : No implementation found for native Landroid/Bluetooth/PeripheriqueDetail;.init (I)V J'ai fait quelque chose de pas bien? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
kaloskagatos Posté(e) 9 février 2011 Share Posté(e) 9 février 2011 (modifié) Est-ce que tu as respecté la règle de nommage des fonctions de ton interface JNI? Elle doivent contenir le chemin du package de ton application The name of the function, though, is important. It follows the specific pattern of “Java,” followed by the package name, followed by the class name, followed by the method name, as defined from Java. Every piece is separated by an underscore instead of a dot. step 3 du tuto : http://mobile.tutsplus.com/tutorials/android/ndk-tutorial/ Sinon c'est peut-être que ta lib n'est pas chargée par ton appli Android, tu as bien ceci dans ta classe Java? static { System.loadLibrary("libndkmain"); ? } Modifié 9 février 2011 par kaloskagatos Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Droiide Posté(e) 9 février 2011 Auteur Share Posté(e) 9 février 2011 (modifié) Je crois que j'ai trouvé (j'éspere mais c'est une erreur tout bête) J'ai pas mis le nom de l'activité dans les noms des fonctions .. J'esseyerai cette aprem parce que là j'ai pas de telephone sur moi .. ça ne marche toujours pas. Est ce qu'il faut modifier le manifest? Modifié 9 février 2011 par Droiide Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Droiide Posté(e) 10 février 2011 Auteur Share Posté(e) 10 février 2011 ça ne marche toujours pas. Est ce qu'il faut modifier le manifest? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
kaloskagatos Posté(e) 10 février 2011 Share Posté(e) 10 février 2011 * Ta lib .so est bien dans un répertoire de ton projet \libs\armeabi ? * Ton appli android, si elle est déclarée dans un package com.droiide.monprojet et si la classe qui utilise la lib s'appelle MaClasse (celle qui fait le static { System.loadLibrary(... ) , dans ton code C ta fonction init s'appelle Java_com_droiide_monprojet_MaClasse_init ou pas? * A chaque fois que tu recompiles ta lib .so tu dois faire un clean du projet Java si tu veux que les modifications soient prises en compte quand tu testes sur ton téléphone. * Tu peux essayer de rajouter cette fonction dans ta lib, elle est appelée au chargement de la lib : jint JNI_OnLoad(JavaVM* vm, void* reserved) { JNIEnv* env; if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_6) != JNI_OK) { return -1; } __android_log_write(ANDROID_LOG_ERROR,"Droiid","Lib native chargée") ; /* get class with (*env)->FindClass */ /* register methods with (*env)->RegisterNatives */ return JNI_VERSION_1_6; } tu mets bien ta lib dans ton projet\libs\armeabi tu clean ton projet Java, tu lances sur ton téléphone connecté en USB ou dans l'émulateur et dans le LogCat d'Eclipse tu devrait voir le message "Droiid","Lib native chargée" ce qui prouve que la lib est bien chargée Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Droiide Posté(e) 10 février 2011 Auteur Share Posté(e) 10 février 2011 (modifié) * Ta lib .so est bien dans un répertoire de ton projet \libs\armeabi ? Oui * Ton appli android, si elle est déclarée dans un package com.droiide.monprojet et si la classe qui utilise la lib s'appelle MaClasse (celle qui fait le static { System.loadLibrary(... ) , dans ton code C ta fonction init s'appelle Java_com_droiide_monprojet_MaClasse_init ou pas? Mon package s'appelle android.Bluetooth. Est ce qu'il faut absolument qu'il s'apelle com.quelquechose? * Tu peux essayer de rajouter cette fonction dans ta lib, elle est appelée au chargement de la lib : jint JNI_OnLoad(JavaVM* vm, void* reserved) { JNIEnv* env; if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_6) != JNI_OK) { return -1; } __android_log_write(ANDROID_LOG_ERROR,"Droiid","Lib native chargée") ; /* get class with (*env)->FindClass */ /* register methods with (*env)->RegisterNatives */ return JNI_VERSION_1_6; } tu mets bien ta lib dans ton projet\libs\armeabi tu clean ton projet Java, tu lances sur ton téléphone connecté en USB ou dans l'émulateur et dans le LogCat d'Eclipse tu devrait voir le message "Droiid","Lib native chargée" ce qui prouve que la lib est bien chargée Je vais essayer. Merci. Je te dis tout ça tout de suite ;) Par clean tu entends enlever le dossier obj? Modifié 10 février 2011 par Droiide Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Droiide Posté(e) 10 février 2011 Auteur Share Posté(e) 10 février 2011 Mon fichier Android.mk c'est ça: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_LDLIBS := -llog -L$(SYSROOT)/usr/lib -lbluetooth LOCAL_MODULE := libwii LOCAL_SRC_FILES:= \ classic.c \ dynamics.c \ events.c \ guitar_hero_3.c \ io.c \ io_nix.c \ ir.c \ nunchuk.c \ wiiuse.c \ wiiusej_WiiUseApi.c include $(BUILD_SHARED_LIBRARY) Je me suis pas trompé? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
kaloskagatos Posté(e) 10 février 2011 Share Posté(e) 10 février 2011 Mon package s'appelle android.Bluetooth. Est ce qu'il faut absolument qu'il s'apelle com.quelquechose? Non pas nécessairement, il faut qu'il soit unique dans le monde si tu comptes publier ton application, c'est pour ça qu'un nom de domaine permet de trouver un nom unique assez facilement, si tu possèdes ce nom de domaine... Enfin c'est un détail. Dans ton cas ta fonction init en C devrait s'appeler void Java_android_Bluetooth_PeripheriqueDetail_init( int param ) ou void Java_android_Bluetooth_PeripheriqueDetail_init ( JNIEnv* env, jobject thiz, int param ) Enfin je t'avouerai que je ne suis pas un expert là dedans donc je peux me tromper... Par clean tu entends enlever le dossier obj? Non, faire un clean du projet Java, dans Eclipse : menu Project / clean.. / ton projet. En effet le .apk de ton appli n'est regénéré que si tu fais une infime modification dans ton code java, donc si tu ne fais que recompiler ta lib .so Eclipse ne va pas le détecter et ne va pas recréer un nouveau .apk avec ton dernier .so. Le clean du projet permet de s'assurer que ton .so est bien utilisé sur ton tel. Au sujet de ton makefile je vois que tu crées un libwii.so, est-ce que dans ta classe PeripheriqueDetail tu fais un static { System.loadLibrary( "libwii" ) } comme dans un tutorial du NDK ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Droiide Posté(e) 10 février 2011 Auteur Share Posté(e) 10 février 2011 Dans PeripheriqueDetail je doit mettre { System.loadLibrary( "wii" ) } au lieu de { System.loadLibrary( "libwii" ) } parce que sinon java n'arrive pas à charger la bibliotheque. Au niveau des appelles des fonctions dans wiiusej_WiiUseApi.c elles sont nommées comme cela: JNIEXPORT jint JNICALL Java_android_Bluetooth_PeripheriqueDetail_connect (JNIEnv *env, jobject obj, jint nbWiimotes) Dans wiiusej_WiiUseApi.h: int Java_android_Bluetooth_PeripheriqueDetail_connect (JNIEnv *, jobject, jint); Dans wiiusej_WiiUseApi.def: EXPORTS Java_android_Bluetooth_PeripheriqueDetail_connect Je pense que je me trompe par là... PS: J'ai fait le clean mais toujours rien ... Je me demande si je vais y arriver un jour.. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
kaloskagatos Posté(e) 11 février 2011 Share Posté(e) 11 février 2011 (modifié) Tu as raison pour le loadlibray "wii" Pour le reste je ne sais pas trop. Essaye de faire fonctionner les exemples du NDK (hello_jni) et voir ce qui diffère de toi. Je ne connais pas les .def et comme je t'ai dit je ne suis pas un expert en JNI... Ne baisse pas les bras ! Modifié 11 février 2011 par kaloskagatos Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Droiide Posté(e) 11 février 2011 Auteur Share Posté(e) 11 février 2011 Bon ba je resseyerai Lundi matin parce que pas de portable ce weekend.. Bon weekend ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Droiide Posté(e) 15 février 2011 Auteur Share Posté(e) 15 février 2011 J'ai réussi =) enfin. le probleme venait de mon Android.mk. Je l'avais pas correctement fait apparement. Merci Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
kaloskagatos Posté(e) 15 février 2011 Share Posté(e) 15 février 2011 Bien joué ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bigstorm Posté(e) 15 février 2011 Share Posté(e) 15 février 2011 (modifié) Je suis en train d'attaquer un projet assez similaire. Je vais établir une connexion bluetooth avec une raquette électronique. Par contre je commence tout juste mon projet! Je ne te serai peut être d'aucun recours au début! Je dois faire des recherches sur le protocole bluetooth suite a votre conversation, je verrai si je dois un NDK! Mais peut être que ma connexion arrivera a s'établir plus facilement et que je te serai utile pour quelques problèmes! (j'arrive déjà a relie le téléphone et mon antenne mais pas a me connecter!) Modifié 19 février 2011 par bigstorm Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
together Posté(e) 16 mai 2011 Share Posté(e) 16 mai 2011 Bonjour, je suis étudiant débutant en développement Android, je suis en train de développer une application bluetooth sur android qui permette à un téléphone portable de se connecter à un appareil équipe de bluetooth et récupéré un message qu'est déjà stocké de dans. je suis arriver à implémenter un code permettant de scanner l'environnement de téléphone et afficher tous les adresses Mac et les noms des appareils bluetooth détectés. quelqu'un peux m'indiquer comment je peux faire pour me connecter à un appareil que je connais déja son adresse Mac ? merci Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.