Android ThingsをRaspberry Pi 3にインストール

  • 42
    Like
  • 2
    Comment

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をダウンロードします。

System Image Downloads

Terms and Conditions

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起動画面

二回目以降はホワイトノイズもなく以下のように表示されます
Loading Android Image

Booting

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デバイスと同様にデバイスの中身が確認できます。
Android Device Monitor

スクリーンショット

Device Screen Captureでスクリーンショットを撮影したかったのですが、出来ませんでした。
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に接続できます
Screen Shot 2016-12-30 at 03.04.13.png
次回起動以降は自動で同じアクセスポイントに接続されます

アプリのインストールと起動

Android Studioを使ってEmpty Activityなプロジェクトを作ります。
ビルドしてRunするだけで通常のAndroidアプリと同様にActivityが起動します。
Hello Android Things
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のようです。