Edited at

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

More than 1 year has passed since last update.


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のようです。