Androidデバイス間でP2P通信できるAllJoynをためしてみた。

横浜Androidプラットフォーム部第18回勉強会でAndroid Builders Summitの紹介があったときに はじめてAllJoynのプロジェクトを知ったので、簡単にサンプルを試してみました。
まだ、Androidデバイス間のP2P通信ができるおもしろいところまでいっていないですが、
次回ということで。ひとつ。

AllJoynとは

Qualcommが作ってるDbusをデバイス間にも拡張したP2Pシステムらしい。
オープンソースなのでGitHubにて公開されています。
froyoとgingerbreadの他、ICSでも動作します。

プロジェクトのサイトは以下
https://www.alljoyn.org/

前提要件

Android SDK 
Android NDK
Eclipse 
Eclipse ADT plug-in

その他の必要なパッケージ

aptitude install scons

Android SDKをインストール

下記のサイトを参考にしてください。
http://developer.android.com/intl/ja/sdk/index.html
Eclipse と ADT plug-in についても記述されているとおもうので省略します。

Android NDKをインストール

# mkdir -p $HOME/alljoyn
# cd $HOME/alljoyn
# wget http://dl.google.com/android/ndk/android-ndk-r7b-linux-x86.tar.bz2
# tar jxvf android-ndk-r7b-linux-x86.tar.bz2

詳細は下記のサイトを参考にしてください。
http://developer.android.com/intl/ja/sdk/ndk/index.html

Androidのソース取得とビルド

# mkdir -p $HOME/alljoyn/android-src
# cd $HOME/alljoyn/android-src

$HOME/alljoyn/android-srcの中にソースを取得して、ビルドしてください。
詳細は下記のサイトを参考にしてください。(ビルドにすごい時間かかります・・・)
http://source.android.com/source/downloading.html

alljoynのソース取得とビルド

$ mkdir -p $HOME/alljoyn/repo
$ cd $HOME/alljoyn/repo
$ repo init -u git://github.com/alljoyn/manifest.git
$ repo sync
$ repo start master --all

$ mkdir -p $HOME/alljoyn/lib
$ cd $HOME/alljoyn/lib
$ wget https://github.com/downloads/KentBeck/junit/junit-4.10.jar
$ jar xvf junit-4.10.jar
$ export JAVA_HOME=/opt/jdk1.6.0_30/ <-環境によって変更してください。
$ export CLASSPATH=$HOME/alljoyn/lib
$ cd $HOME/alljoyn/repo
$ scons OS=android CPU=arm ANDROID_NDK=$HOME/alljoyn/android-ndk-r7b ANDROID_SRC=$HOME/alljoyn/android-src WS=off

libcrypto.soを取得

Androidエミュレータを起動する。(※avdの設定hogehogeは作成済みという前提)
$ emulator -avd hogehoge
$ cd $HOME/alljoyn/repo/build/android/arm/debug/dist/lib
$ adb pull /system/lib/libcrypto.so libcrypto.so

なぜか、ターゲットになるAndroidのlibcrypto.soを取得するという手順。
それって、どうなの?

AllJoynデーモンの作成とインストール

$ cd $HOME/alljoyn/repo/build/android/arm/debug/dist/alljoyn_android/alljoyn/
$ $HOME/alljoyn/android-ndk-r7b/ndk-build

eclipseを起動

新しいプロジェクトを作成
File -> New -> project -> Android Project
[Create project from existing source]を選択
location に [$HOME/alljoyn/repo/build/android/arm/debug/dist/alljoyn_android/alljoyn]を指定
finishを選択

ビルド
Project -> Build Project

エクスポート
File -> Export... -> Export Android Application から alljoyn.apk を作成

AllJoynデーモンプログラムをインストールする。
$ adb install alljoyn.apk

AllJoynデーモンプログラムを実行すると以下のようにバックグラウンドで常駐します。
f:id:alumican:20120229093140p:plain

サンプルの作成とインストール

alljoynのサンプルで動作検証する。

Simple Clientアプリ

eclipseを起動

新しいプロジェクトを作成
File -> New -> project -> Android Project
[Create project from existing source]を選択
location に [$HOME/alljoyn/repo/build/android/arm/debug/dist/java/samples/simple/client]を指定
finishを選択

ビルド
Project -> Build Project

エクスポート
File -> Export... -> Export Android Application から Client.apk を作成

Simple Serviceアプリ

eclipseを起動

新しいプロジェクトを作成
File -> New -> project -> Android Project
[Create project from existing source]を選択
location に [$HOME/alljoyn/repo/build/android/arm/debug/dist/java/samples/simple/service]を指定
finishを選択

ビルド
Project -> Build Project

エクスポート
File -> Export... -> Export Android Application から Service.apk を作成

サンプルアプリをインストールする。

$ adb install Client.apk
$ adb install Service.apk

検証方法

以下の順番で実行する。
AllJoynデーモン(alljoyn.apk)
Simple Service(Service.apk) ※必ずHOMEボタンでぬけること。BACKボタンで抜けるとうまく動作しません。
Simple Client(Client.apk)

クライアントアプリ(Client.apk)のアクティビティの「Enter Message」に文字を入力し、
Enterキーを押すと、Simple Serviceが応答し、検証できます。

以下が成功した画面です。

f:id:alumican:20120301120400p:plain