EKEN M001 で始める Android アプリケーション開発

1 万円ぐらいで買えるタッチパネル式 Android 端末 EKEN M001 を使って、Android アプリケーションをデバッグできる環境を整備したので手順をまとめておきます。

USB で接続しても Android SDK が M001 を認識してくれないので、wifi 経由で adb 接続する方法の説明になります。

準備するもの

  • EKEN M001 (以下 M001)
    • 僕は海外の通販サイトで 120 ドルで買いましたが、安全性を求めるなら国内で 1 万 6 千円ぐらい出して買ったほうがいいかもです
    • この記事に書かれている内容は、すべて公式で提供しているファームウェア (5/15 版、ちょっと古い) を適用した上で試しています。買った直後の状態やカスタムロムでは未確認です
  • 9V 出力できる AC アダプタ
    • 付属品の AC アダプタが極端に粗悪らしく、自分のものは届いて 5 日で壊れたので AC アダプタを買い替えました
    • 電源が入らなくなったらまず AC アダプタのほうを疑うといいと思います、買い替える場合は他の機器にも使えるマルチ AC アダプタがいいと思います
  • 無線 LAN 接続できるコンピュータ (以下 PC)
    • 僕は MacBook を使っていますが Eclipse さえまともに動かせれば Linux でも Windows でも大丈夫だと思います

ソフトウェアのインストール

まずは Android SDK をダウンロードして、適当な場所 (自分の場合は /Users/tily/android-sdk-mac_86/) に展開します。
その後、Eclipse をインストールして、Android 向けの設定を行います。やり方は色んなところに書いてあるので省略しますが、なるべく日付の新しい記事を参照したほうがいいと思います。特に M001 向けの設定をする必要はありません。

M001 側の設定

"Settings -> Applications -> Development" から "USB debugging / Stay awake / Allow mock locations" の 3 項目にチェックを入れます (ほんとに全部必要なのかよく分かってないです、すみません)。

http://farm5.static.flickr.com/4061/4652565802_50540dc60d.jpg

疎通確認

前提として、接続機器同士で TCP 通信できる (ping が通る) 無線 LAN ネットワークが必要です (MacBookAirMac に M001 を接続するのでも OK でした)。

まずは M001 の "Settings -> Wireless controls -> Wi-Fi settings" から M001 に割り当てられている IP アドレスを取得します。

http://farm5.static.flickr.com/4023/4652566774_a5dd0f4212.jpg

この IP アドレスに対して PC 側から ping が通れば OK です。

# PC 側のターミナル
$ ping 10.0.2.8
PING 10.0.2.8 (10.0.2.8): 56 data bytes
64 bytes from 10.0.2.8: icmp_seq=0 ttl=64 time=1.316 ms
64 bytes from 10.0.2.8: icmp_seq=1 ttl=64 time=1.513 ms
64 bytes from 10.0.2.8: icmp_seq=2 ttl=64 time=1.207 ms
(...)

ルータの設定や利用している無線 LAN の方式で機器同士の通信ができないことがあるので注意が必要です。

僕の場合、マルチ AP からゲストモードで接続していたら PC から M001 に ping が通らない状態だったので、両方の機器を共に WEP 接続に切り替えたらうまく ping が通るようになりました。

adb で接続してみる

以下の手順で PC 側から adb 接続できます (Wifi接続でadbコマンドを使う - forzando@net を参考にさせていただきました)。

$ # PC 側のターミナル
$ export PATH=$PATH:/Users/tily/android-sdk-mac_86/tools # adb にパスを通す
$ adb kill-server
$ adb start-server
$ adb connect 10.0.2.8:5555
connected to 10.0.2.8:5555
$ adb devices
List of devices attached 
10.0.2.8:5555   device

"adb devices" コマンドで M001 の IP アドレスが表示されれば OK です。
試しに "adb shell" で M001 側のシェルを操作してみます。

$ adb shell
/ $ ls /
LocalDisk             init.goldfish.rc      sys
UserSpace             init.rc               system
busybox               init.rc.bak           udisk
cache                 lost+found            usbgadget.log
data                  proc                  usbgadget.sh
default.prop          sbin                  wm8505_kpad_md.ko
dev                   sdcard                wm9715-api.ko
etc                   sensor_mma7660.ko     wm9715-ts_800_480.ko
g_file_storage.ko     shared_prefs          wmt_battery.ko
init                  sqlite_stmt_journals

"df -h" とか "cat /proc/meminfo" とかも普通に動きます。

Hello, World

Eclipse で新規 Android プロジェクトを作成し、Android 公式から "Hello, Android" のソースコードをコピーします (パッケージ名とかは適宜書き換える必要があります)。

まず、実行しようとすると "ActivityManager: /system/bin/sh: am: not found" というエラーが Eclipseデバッグウィンドウに出ました。

この方法が正しいのかよく分かってませんが、"adb shell" で接続して "/system/bin/am" (シェルスクリプト) の先頭に shebang (#!/system/bin/sh) を書いたら動きました。

さらに実行しようとすると、今度は "New package not yet registered with the system." というエラーが出て正常に実行できません。

pixass-online - Android + Eclipse ビルド出来ない件にある gen フォルダを削除する手順を試したり、あらかじめ "adb install" してたら動くようになりました (原因よく分かってない…)。ここまでやってやっと "Hello, Android" が動きます。

http://farm5.static.flickr.com/4016/4641337571_7cef864b86.jpg

実機のイベントを Eclipse で見れるようにしてみる

こんな感じのプログラムを書いて、タッチイベントをとってみます。

http://gyazo.com/bc4980a7021aa785c5c002fd1ca45b43.png

実機の画面をタッチすると Eclipse の LogCat ウィンドウにイベントのログ表示されます、手軽に組み込み開発してる気分が味わえて面白い。

まとめ

EKEN M001、もっさりしてて実用には耐えない感じですが、1 万円ぐらいで実機を使って Android アプリ開発の勉強ができると思えば結構ありかもです。