新年を迎えて少しは新しいことにも挑戦してみようと思い立ち、ADT (Android Development Tools)をMBAにインストール。Macでも動いてよかった。これが、Windowsで動かさねばならなかったら、それだけで挫折していたでしょう。Android用のアプリを作ることにはほとんど興味は無いのですが、今回ADTをインストールすることを決心したのには、理由があります。
これまでは、MBAのMac OS XからWT32にSPPで接続することで、WT32の動きをモニタしたり、その設定変更をしたりしていたのですが、時々Mac OS Xがクラッシュします。決まってMac OS側からSPPの接続を切断した場合に、クラッシュが発生するのですが、いつも起こるわけではありません。しかしながら、いつクラッシュするかハラハラしながら使っているのもシンドイので、Macの代わりにAndroid携帯をSPPでつないで動作モニタすることにしたのです。Play Storeで調べるとSPP接続の端末ソフトもいくつか見つかるのですが、Googleが提供するBluetoothChatというサンプルプログラムをちょっと変更すればSPPで接続できるということを多くの方が紹介されています。電子工作やロボットのリモコン操作を実現するにも、みなさんこのサンプルを元にしていらっしゃるようです。
そんな訳で、サンプルをビルドするだけなら自分にもできそうなので、挑戦してみることにした次第です。いろいろなサイトを参考にしながらサンプルプロジェクトを開いてビルド、そしてUSB接続した実機に転送。ところが、起動後すぐに画面が暗転してしまい。しばらくすると、こんな表示が出て動いてくれません。
サンプルが動いてくれないとは予想外。検索したところ、
このサイトにも同じような問題が発生したとの記述があったので、対処を倣うとともにSPPに対応するためにUUIDを変更。しかしながら、やはり動き始めてくれません。しょうがないので、デバッガを動かして調べてみるとgetActionBar()がnullを返しているためにクラッシュしていることが判明。該当する箇所をコメントアウトすれば、動き始めることがわかりました。なんだか、どんどん脇道にそれていきますが、しょうがないので、もう少し追いかけるハメに。。
すると
ActionBarを使うにはSDK version を11以上に設定しないといけない
というTipsが見つかりました。そういえば、ADTからアプリを起動しようとするとコンソールに
WARNING: Application does not specify an API level requirement!
というメッセージが表示されていました。これまで無視していましたが、どうやら関係ありそうです。
AndroidManifest.xmlを確認してみると確かに
< uses-sdk minSdkversion="6" />
となっていました。これを
< uses-sdk android:targetSdkVersion="11" android:minSdkVersion="11"/>
と修正したところ元のソースのままでもちゃんと動くようになりました。結局のところ上記のAndroidManifest.xmlとUUIDさえ変更すればSPPでつながることがわかりました。自分の端末がAndroid 4.0なので相当するSDKとサンプルを選択したのが遠因のようです。2.8とか古いサンプルを使えば(ActionBarを使っていないので)この問題は発生しないようです。
こうしてサンプルを動かすことはできましたが、もともとがチャット用アプリなので、行末にCRを付けてくれないうえに、端末操作に使うには表示がうるさいです。行末にCRを追加して送信するようにしたのが下の画面です。
もうちょっと手を加えて、よりシンプルにするつもりです。
なんだかんだで、正月の一日を費やしてしまいました。こんな風に入り口でつまずいてしまうと、
やっぱり、Androidの闇は深いんだ。
と思ってしまいます。