2

ここ数日、既存の Android NDK プロジェクトで使用する静的ライブラリまたは共有ライブラリに avahi をビルドするのに苦労していました。

アプリ ストアとプレイ ストアにいくつかのゲームがあり、私の仕事は Android バージョンでマルチプレイヤーを動作させることです。具体的には、Bonjour コンポーネントを置き換えて、これらのゲームが zeroconf 経由で相互に接続できるようにする必要があります。

調査によると、avahi が私たちが探しているライブラリであることが示されているようですが、現時点では、機能するものなら何でも受け入れることができます。

ここの誰かが、avahi のコンパイルを手伝ってくれるか、別のより適切な (そしてインストールが簡単な) ライブラリを提案してくれることを願っています。

プロジェクトは android-ndk-r8b を使用し、コマンド ラインを使用して OSX 10.7.4 でビルドされています (Eclipse ではありません)。

ここから最新の Avahi ソースを取得します: http://www.linuxfromscratch.org/blfs/view/svn/basicnet/avahi.html

./configure をエラーなしで実行するために必要なすべてのライブラリを自作しました。

./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 は、明らかな危険信号なしで実行されます。

make を実行すると、次のコンパイル エラーが発生します。

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

android-ndk-r8b ライブラリに対してビルドしていないか、ipv6.h などを見つけていないことがわかりました。

私の .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

--host=arm-linux-androideabi を ./configure 引数リストに追加すると、次のエラーが発生します。

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

利用可能なホスト システム タイプのリストを取得する方法がわからなかったので、方向を変えて、Android.mk ファイルを介して静的ライブラリをビルドすることにしました。

適切な Android.mk ファイルの作成に関するこの投稿を見つけました: Android で avahi をコンパイルできません

すべてのサブディレクトリ内に Android.mk ファイルがないことに気付きました。

すべての Makefile.am ファイルを Android.mk ファイルに変換するために、Androgenizer を調査、ダウンロード、ビルドしました。 http://cgit.collabora.com/git/user/derek/androgenizer.git/

ただし、それを行う方法に関する情報を把握または見つけることができませんでした=/

自分の 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)

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':

そして今、私はかなり立ち往生しています。

iface-linux.c および h ファイルを #if 0' しようとした結果、他のエラーが次々と発生したため、悪い考えである可能性があります。

./configure コマンドで間違ったことをしたのではないかと思いますか? おそらく私の Android.mk ファイルに問題がありますか?

これはかなりの数の開発者が対処しているものに違いないと思うので、Google 経由で適切な情報が見つからないように見えるため、おそらく何かが欠けていると思います。

どんな助けでも大歓迎です!これを avhi メーリング リストにも送信しました。応答があれば、後世のためにここに投稿します。

ありがとう、クリス

4

2 に答える 2

1

私のために働いた解決策をここでフォローアップします。

私の解決策は、Avahi の代わりに JMDNS を使用することでした。

Avahi メーリング リストにはあまりトラフィックがありません。

JMDNS には実用的な例があります。JMDNS を NDK 環境にセットアップするのに約 4 時間、いくつかの「ねじれ」を解決するのに約 1 日かかりました。

于 2012-12-20T23:52:04.067 に答える
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 the subdirectories: make Android.mk

then, you will see Android.mk in all the subdirectories.

ndk-build V=1 NDK_LOG=2 APP_ABI="armeabi armeabi-v7a"
于 2013-03-14T02:08:43.347 に答える