Android Thingsとは?
GoogleのIoT platformとして発表されたもので、
発表時点では
- Intel Edison
- NXP Pico
- Raspberry Pi 3
の3つのハードウェアにインストール可能なOSイメージがGoogleから提供されています。
https://developer.android.com/things/index.html
https://android-developers.googleblog.com/2016/12/announcing-googles-new-internet-of-things-platform-with-weave-and-android-things.html
このページではRaspberry Pi 3にAndroid Thingsをインストールする手順を記載しています
Intel Edisonへの導入は以下の記事をどうぞ。
Android ThingsをIntel Edison Kit for Arduinoにインストール
http://qiita.com/aoinakanishi/items/45b950a8e8ec2f0393f5
ハードウェアの準備
- Raspberry Pi 3
- 電源ケーブル
- HDMIケーブル
- microSD(8G以上)
があれば動くようになります。
OSイメージのダウンロード
https://developer.android.com/things/preview/download.html
こちらからandroidthings_rpi3_devpreview_1.zipをダウンロードします。
zipファイルの解凍
Macでは以下のようなエラーが出て解凍できませんでした。
% unzip androidthings_rpi3_devpreview_1.zip
Archive: androidthings_rpi3_devpreview_1.zip
warning [androidthings_rpi3_devpreview_1.zip]: 76 extra bytes at beginning or within zipfile
(attempting to process anyway)
error [androidthings_rpi3_devpreview_1.zip]: reported length of central directory is
-76 bytes too long (Atari STZip zipfile? J.H.Holm ZIPSPLIT 1.1
zipfile?). Compensating...
skipping: iot_rpi3.img need PK compat. v4.5 (can do v2.1)
note: didn't find end-of-central-dir signature at end of central dir.
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)
どうやら大きなファイルは正しく解凍できないようです。
http://qiita.com/ikai/items/f7f2f31a00cd2279f963
Linux等で作業をするか、リンク先のように
tar xvf androidthings_rpi3_devpreview_1.zip
とすることで解凍が完了しiot_rpi3.imgというファイルが出力されます。
microSDにイメージの書き込み
diskutilで現在接続されているディスクのパーティションを確認します
% diskutil list
/dev/disk0
--- 略 ---
/dev/disk1
--- 略 ---
/dev/disk2
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *15.6 GB disk2
1: Windows_FAT_32 NO NAME 15.6 GB disk2s1
今回使用するmicroSDは16GBのもので/dev/disk2であるという事が確認できましたので、
diskutil unmountDisk /dev/disk2
としてアンマウントします。
% sudo dd bs=1m if=./iot_rpi3.img of=/dev/disk2
4352+0 records in
4352+0 records out
4563402752 bytes transferred in 6783.463400 secs (672725 bytes/sec)
でイメージファイルをmicroSDに書き込みます(書き込み完了まで1時間ほどかかりました)
androidthingsの起動
- LANケーブル
- HDMIケーブル
- 電源ケーブル
- microSD
がRaspberry Pi 3に正しく刺さっている事を確認します。
電源が入ると、昔のテレビのようなホワイトノイズが表示されましたが、暫く経つと以下のような画面に切り替わりました。
Android Thingsに接続
OSが起動したら、スクリーン上に表示されたIPアドレスにadbで接続できます。
% adb connect 10.***.***.102
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
connected to 10.***.***.102:5555
起動直後のプロセス一覧
Android Device Monitorを起動すると通常のAndroidデバイスと同様にデバイスの中身が確認できます。
スクリーンショット
Device Screen Captureでスクリーンショットを撮影したかったのですが、出来ませんでした。
adb shell screencap -p /sdcard/screenshot.png
コマンドからも撮影できません。
adb shell screenrecord --verbose /sdcard/screenrecord.mp4
screenrecordコマンドでは撮影できました↓
adb shellでログイン
% adb shell
rpi3:/ $ id
uid=2000(shell) gid=2000(shell) groups=2000(shell),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc) context=u:r:shell:s0
一般的なAndroid端末同様に問題なくadb shellできます
adb rootでルート権限取得
% adb root
restarting adbd as root
でadbdを再起動し
adb connect 10.***.***.102
で接続し直すと
% adb shell
rpi3:/ # id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc) context=u:r:su:s0
rootでログインすることが出来ました
Wifi設定
https://developer.android.com/things/hardware/raspberrypi.html#connecting_wi-fi
ここにあるとおり
$ adb shell am startservice \
-n com.google.wifisetup/.WifiSetupService \
-a WifiSetupService.Connect \
-e ssid <Network_SSID> \
-e passphrase <Network_Passcode>
Starting service: Intent { act=WifiSetupService.Connect cmp=com.google.wifisetup/.WifiSetupService (has extras) }
のコマンドを実行するとWifiに接続できます
次回起動以降は自動で同じアクセスポイントに接続されます
アプリのインストールと起動
Android Studioを使ってEmpty Activityなプロジェクトを作ります。
ビルドしてRunするだけで通常のAndroidアプリと同様にActivityが起動します。
Instant Runも問題なく動きます。軽く触った印象としては通常のアプリ開発と変わらないです。
アプリの終了(ホーム画面に戻す)
バックボタンイベントを発行
adb shell input keyevent KEYCODE_BACK
ホームボタンイベントを発行
adb shell input keyevent KEYCODE_HOME
強制終了
adb shell am force-stop <パッケージ名>
デフォルトでインストールされているパッケージ一覧
% adb shell pm list package
package:com.android.providers.telephony
package:com.android.providers.calendar
package:com.android.providers.media
package:com.android.externalstorage
package:com.android.htmlviewer
package:com.android.providers.downloads
package:com.google.android.iot.frameworkpackagestubs
package:com.android.defcontainer
package:com.android.pacprocessor
package:com.google.wifisetup
package:com.android.certinstaller
package:android
package:com.android.mtp
package:com.android.backupconfirm
package:com.android.provision
package:com.android.statementservice
package:com.android.providers.settings
package:com.android.sharedstoragebackup
package:com.android.webview
package:com.android.inputdevices
package:android.ext.shared
package:com.android.onetimeinitializer
package:com.android.keychain
package:com.google.android.gms
package:com.google.android.gsf
package:com.google.android.tts
package:android.ext.services
package:com.google.android.things.permissions
package:com.android.packageinstaller
package:com.android.proxyhandler
package:com.android.managedprovisioning
package:com.android.settings
package:com.android.iotlauncher
package:com.android.shell
package:com.android.wallpaperbackup
package:com.android.providers.userdictionary
package:com.android.location.fused
package:com.android.bluetoothmidiservice
package:com.android.bluetooth
package:com.android.providers.contacts
デフォルトのホーム画面はcom.android.iotlauncherのようです。