2014/05/24

PidoraでCLIからBluetooth SPP接続しようとしたらbluez-simple-agentがない件

Raspberry PiのPidoraでコマンドラインからBluetooth SPPで接続しようとしたところ、bluezパッケージ(bluez4)をインストールしてあるにもかかわらず、
bluez-simple-agentなどのコマンドがないということで引っかかってしまいました。
私のRPiのPidoraはFedora18ベースのバージョンなのですが、どうもリポジトリにある bluez4 のパッケージに、これらのコマンドが含まれていないようです。(たぶん。)

Bluezのソースコードからビルドすれば良いのですが、
今ビルドするだけのために必要なパッケージをRaspberry PiのSDカードにインストールするのもあれですし、単なるPythonスクリプトですので、他から持ってくることにしました。

私のRPiのPidoraにあるbluezは Bluez-4.101-5 です。
従って、bluez-4.101 のソースコードから持ってくれば良いということになります。
http://www.bluez.org/download/ から bluez-4.101.tar.xz をダウンロードし、
アーカイブを解凍したところ、"test"ディレクトリ以下に"simple-agent"、"test-device"などのファイルがありました。
# ls test/
agent.c     l2test.c            service-spp.xml   test-nap
attest.c    list-devices        simple-agent      test-network
avtest.c    lmptest.c           simple-endpoint   test-oob
bdaddr.8    monitor-bluetooth   simple-player     test-proximity
bdaddr.c    mpris-player.c      simple-service    test-sap-server
btiotest.c  rctest.1            test-adapter      test-serial
dbusdef.py  rctest.c            test-attrib       test-serial-proxy
gaptest.c   sap-client          test-audio        test-service
hciemu.1    scotest.c           test-device       test-telephony
hciemu.c    sdptest.c           test-discovery    test-textfile.c
hsmicro     service-did.xml     test-health       test-thermometer
hsplay      service-ftp.xml     test-health-sink  uuidtest.c
hstest.c    service-opp.xml     test-input
ipctest.c   service-record.dtd  test-manager
この中からを必要なスクリプト(simple-agent, test-device)をリネームして/usr/local/bin あたりにコピーすればOKです。
# cp test/simple-agent /usr/local/bin/bluez-simple-agent
# cp test/test-device /usr/local/bin/bluez-test-device

あとは接続を試してみます...。
# hciconfig hci0 up
# hcitool scan
Scanning ...
    XX:XX:XX:XX:XX:XX    xxxxx

# bluez-simple-agent hci0 XX:XX:XX:XX:XX:XX
# RequestPinCode (/org/bluez/xxx/hci0/dev_xx_xx_xx_xx_xx_xx)
Enter PIN Code: XXXX

# bluez-test-device trusted XX:XX:XX:XX:XX:XX
# rfcomm bind 0  XX:XX:XX:XX:XX:XX
# rfcomm
rfcomm0: XX:XX:XX:XX:XX:XX channel 1 closed

/dev/rfcomm*にバインドされましたので、minicom などのターミナルから接続できるはずです。
# minicom -D /dev/rfcomm0

2014/05/10

Android Wearプロジェクトを作ろうとして嵌ったので自分用初歩的メモ

来月あたりに Android Wear搭載スマートウォッチが発売されるそうなので
今更ですが、Android Wear Developer Previewに登録して始めてみました。
(3月あたりの発表直後に開発開始された方、流石です。私もそれくらいの早さで取りかからないとついていけないなぁ...。
...3月は学会発表やら何やらでそれどころじゃなかったんです!(ひど
い言い訳w))

今回の記事は申し訳ありませんが、Android Wear云々というより
Androidアプリケーション開発の初歩的なミスの話です。開発環境はEclipseです。
(そろそろAndroid Studioに乗り換えたほうが良さそう...。)
以前からアプリ開発で稀に似た問題があったので、この機会にメモしておきます。

開発の始め方については
http://developer.android.com/wear/preview/start.html
または 松岡氏による日本語訳 を参照してください。

AVDでAndroid Wearの仮想マシンを作ろうとしたら、対応するアーキテクチャが無いといわれる


Android SDK Managerを起動して、最新のSDK Toolsと、Android 4.4.2 の必要なコンポーネントが本当にインストールされているか確認しましょう。
特に、私みたいに以前からあまり開発環境をアップデートしていない人は、環境が古くなっており、ひと通りのアップデートを適用したあとにSDK Managerを再読み込みさせて...という作業を何度か繰り返さないといけないかもしれません。

java.lang.NoClassDefFoundError: android.preview.support.v4.app.NotificationManagerCompat

  1. プロジェクトのディレクトリのlibsディレクトリに"wearable-preview-support.jar"をコピー(Eclipseのパッケージエクスプローラ上でD&D)する。
  2. プロジェクトのプロパティで"Javaのビルドパス"設定を開いて...

    のようになっているかどうか確認する。

java.lang.NoClassDefFoundError: Android.support.v4.app.NotificationCompat$Builder

  1. Android SDK Managerで"Support Library"が最新(執筆時: v19.1)かどうか確認する。
    (※プロジェクトの"Androidツール"メニューなどから"サポートライブラリーの追加"をすると、何故か古いバージョンのv19.0に置き換わることがあったので注意。)
  2. Android SDKのインストールディレクトリ内の extras/android/extras/android/support/v4/android-support-v4.jar を
    プロジェクトのディレクトリのlibsディレクトリにコピーする (Eclipseのパッケージエクスプローラ上でD&D)
  3. プロジェクトのプロパティで"Javaのビルドパス"設定を開いて...あとは上と同じ。

その他


いずれも、android-support-v4.jarなどがビルドパスに追加されているからといっても、それが最新リビジョンとは限りませんし、複数表示されている場合は"除去"して一からやってみることをおすすめします。(こちらも参照)
また、appcombat_v7がproject.propertiesで定義されていて勝手に読み込まれていたりする場合もあるので、そういう場合はまず外してみましょう。

もしかしたら、追記するかもしれませんが...以上です(笑)
期待して記事にアクセスしてくださった方には申し訳ありませんが、
初歩的な話でした m(_ _)m

p.s. 試しにこんなものを作ってみました。
シンプルなサイコロのアプリです。(GitHub: weardice_android)
ちょっと Notification の使い方としてはあれですが...w (コンセプト的に合わないかも)
今現在はSDKでCue Cardが使えない(Notificationに対する応答として音声入力はできますが、ホームから何か新しいアクションが実行できない)ので、とりあえずサイコロを振った結果を表示する部分と、"もう一度振る"というActionを実装しました。
最終的には"Ok google, サイコロ振って"と言うとサイコロが振れる予定ですw
ちなみに画像素材は自作です。ついでにサイコロの3Dモデルも作りました(笑)

ところで開発エミュレータ上でRoundのスキンを選んでいるのに、丸型にくり抜いて表示されないのですが、何故でしょうか...w 実用上、然程問題はありませんが
[2014/05/11 追記] 仮想マシンの設定で"ホストGPUを使用する"を有効にしていると、円形にくり抜いて表示されないようです。GPUによってオーバレイされるからでしょうか?


さて...気になる実機は LGの"G Watch"が第一弾として発売されるようですが、
私としては今までのスマートウォッチは四角いモノが殆どだったので、やはり丸型の"Moto 360"に興味があったり。((o(´∀`)o))ワクワク
正式版のSDKも楽しみです。