2012-10-20 1 views
2

Au cours des derniers jours, j'ai eu de la difficulté à créer avahi dans une bibliothèque statique ou partagée à utiliser avec un projet Android NDK existant.Problèmes de compilation d'avahi dans le projet Android NDK

Nous avons quelques jeux dans les boutiques App et Play et ma tâche est de faire fonctionner le multijoueur dans les versions Android. Concrètement, la tâche consiste à remplacer le composant Bonjour afin que ces jeux puissent se connecter via zeroconf. La recherche a semblé indiquer qu'avahi est le lib que nous cherchons, mais à ce point je suis ouvert à tout ce qui fonctionnera! Je souhaite que quelqu'un ici puisse m'aider à obtenir la compilation d'avahi ou suggérer une lib plus appropriée (et plus facile à installer).

projet utilise Android NDK-R8b et est en cours de construction sur Mac OS X 10.7.4 en ligne de commande (éclipse pas)

Got la dernière source de Avahi d'ici: http://www.linuxfromscratch.org/blfs/view/svn/basicnet/avahi.html

Homebrewed tous les libs nécessaires obtenir ./configure pour s'exécuter sans erreurs.

./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-static --disable-mono --disable-monodoc --disable-gdbm --disable-libdaemon --disable-nls --disable-gtk --disable-gtk3 --disable-python --disable-qt3 --disable-qt4 --enable-core-docs --with-distro=none 

./configure fonctionne sans indicateurs rouges apparents.

font de ce erreur de compilation:

socket.c: In function 'ipv6_pktinfo': 
socket.c:271: warning: unused variable 'yes' [-Wunused-variable] 
socket.c:270: warning: unused parameter 'fd' [-Wunused-parameter] 
socket.c: In function 'avahi_send_dns_packet_ipv6': 
socket.c:609: error: 'IPV6_PKTINFO' undeclared (first use in this function) 
socket.c:609: error: (Each undeclared identifier is reported only once 
socket.c:609: error: for each function it appears in.) 
socket.c: In function 'avahi_recv_dns_packet_ipv6': 
socket.c:869: error: 'IPV6_HOPLIMIT' undeclared (first use in this function) 
socket.c:878: error: 'IPV6_PKTINFO' undeclared (first use in this function) 
make[2]: *** [libavahi_core_la-socket.lo] Error 1 
make[1]: *** [all-recursive] Error 1 
make: *** [all] Error 2 

Figured que ce n'est pas la construction contre les libs android-NDK-R8b ou de trouver ipv6.h ou quelque chose.

vérifié mon fichier .bash_profile.sh:

export PATH=/Users/Muy01/Projects/Development/Android/android-sdks/tools/:$PATH 
export PATH=/Users/Muy01/Projects/Development/Android/android-sdks/platform-tools/:$PATH 
export PATH=/Users/Muy01/Projects/Development/Android/android-ndk-r8b/:$PATH 

ajouté --host = arm-linux-androideabi aux arguments ./configure liste résultant de cette erreur:

checking host system type... Invalid configuration `arm-linux-androideabi': system `androideabi' not recognized 

Couldn Ne pas comprendre comment obtenir une liste des types de systèmes hôte disponibles ainsi changé de direction et a décidé d'essayer de construire la lib statique via le fichier Android.mk.

trouvé ce post sur la création d'un fichier Android.mk approprié: can't compile avahi on android

réalisais que je n'ai pas les fichiers Android.mk au sein de tous les sous-répertoires.

Recherche, téléchargé, construit, Androgenizer pour essayer et convertir tous les fichiers Makefile.am en fichiers Android.mk. http://cgit.collabora.com/git/user/derek/androgenizer.git/

Impossible de savoir ou trouver des informations sur la façon de le faire si =/

avons décidé d'essayer et créer mon propre fichier Android.mk:

LOCAL_PATH := $(call my-dir) 
ROOT_LOCAL_PATH :=$(call my-dir) 

#Build avahi into a static lib 
include $(CLEAR_VARS) 
AVAHI_TOP := $(ROOT_LOCAL_PATH)/../avahi-0.6.31 

MY_SOURCES := $(wildcard $(AVAHI_TOP)/avahi-core/*.c*) 
MY_SOURCES += $(wildcard $(AVAHI_TOP)/avahi-common/*.c*) 
LOCAL_C_INCLUDES := $(AVAHI_TOP) 
LOCAL_SRC_FILES := $(MY_SOURCES:$(LOCAL_PATH)%=%) 

LOCAL_MODULE := avahi 

include $(BUILD_STATIC_LIBRARY) 

Résultats des erreurs de temps de compilation pour avahi-core/iface-linux.c: 33: 0:

/avahi-0.6.31/avahi-core/iface-linux.h:27:8: Redefinition of 'struct AvahiInterfaceMonitorOSDep' 
/avahi-0.6.31/avahi-core/iface.h:46:16: Originally defined here 
/avahi-0.6.31/avahi-core/iface-linux.h:33:9: Redeclaration of enumerator 'LIST_IFACE' 
/avahi-0.6.31/avahi-core/iface.h:52:9: Previous definition of 'LIST_IFACE' was here 
/avahi-0.6.31/avahi-core/iface-linux.h:34:9: Redeclaration of enumerator 'LIST_ADDR' 
/avahi-0.6.31/avahi-core/iface.h:53:9: Previous definition of 'LIST_ADDR' was here 
/avahi-0.6.31/avahi-core/iface-linux.h:35:9: Redeclaration of enumerator 'LIST_DONE' 
/avahi-0.6.31/avahi-core/iface.h:54:9: Previous definition of 'LIST_DONE' was here 
/jni//../avahi-0.6.31/avahi-core/iface-linux.c: In function 'netlink_callback': 

Et maintenant je suis bloqué.

J'ai essayé #if de sortir les fichiers iface-linux.c et h résultant en une série d'autres erreurs, donc une mauvaise idée.

Vous pensez que c'est peut-être quelque chose que j'ai mal fait avec la commande ./configure? Peut-être un problème avec mon fichier Android.mk? Je pense que cela doit être quelque chose que beaucoup de développeurs ont à faire, donc il me manque probablement quelque chose parce que je n'arrive pas à trouver de bonnes informations via google.

Toute aide serait grandement appréciée! Je l'ai aussi envoyé à la liste de diffusion avhi, si je reçois une réponse, je posterai ici pour la postérité.

Merci, Chris

Répondre

1

je vais suivre ici avec la solution qui a fonctionné pour moi.

Ma solution était d'utiliser JMDNS au lieu de Avahi.

Il n'y a pas beaucoup de trafic sur la liste de diffusion Avahi.

JMDNS dispose d'exemples de travail disponibles. JMDNS m'a pris environ 4 heures pour mettre en place dans mon environnement NDK et environ une journée pour travailler quelques "kinks".

0
  1. tar avahi-0.6.31
  2. patch -p1 < 0001-Add-Android-support.patch patch -p1 < 0002-Add-uninstalled.pc.in-files.patch
  3. cd avahi-0.6.31 ./configure --sysconfdir=/etc --localstatedir=/var make
  4. cd les sous-répertoires: make Android.mk

alors, vous verrez Android.mk dans tous les sous-répertoires.

ndk-build V=1 NDK_LOG=2 APP_ABI="armeabi armeabi-v7a" 
Questions connexes