バスキュール技術ブログ

バスキュールが得意とするインタラクティブエンジニアリングを、あますことなくお届け!

GearVR用Android端末の初期設定を自動化した話

Androidのセットアップ、実は自動化できます。

f:id:bascule-dev:20170703113913g:plain

VRエンジニアの桟(@katapad )です。
以前、GearVRを使った案件で、数十台の端末セットアップを自動化しました。Googleアカウントなどのパスワードをちまちま入力するの、めんどくさいですよね。iPhoneのようにバックアップからリストアできたらよかったのですが、うまくいかずにガリッとやっちゃいました。

↑自動でGoogleアカウントを設定している様子

詳しい実装を書くとめちゃくちゃに長くなるので、ここでは要点だけを書きますね。

Android SDKのadb shell機能を使うと、わりとやりたい放題できる

shellが用意されており、PC側からそれなりに操作できます。

  • キーボードイベントを発生させる
  • タップ・スワイプイベントを発生させる
    • ロングタップもOK
  • 各種設定画面を開く
  • 画面のキャプチャを撮る

これを「設定画面を開いて」-「チェックマークあたりをタップして」という具合に、チマチマと設定していきます。

さらにAndroid NDK (Native Development Kit)を入れていじくると、Androidの画面をストリームで取得したりができるようです。

できたこと: アカウント・パスワード入力自動化、設定自動化

  • Googleアカウントの設定、wifiパスワード入力などのテキスト入力
  • 設定画面での設定を自動化
    • ディスプレイの自動オフを10分にする
    • GearVRサービスで開発者モードをオンにする
    • など
  • 上部ドロワーメニュー内の設定のOn/Off操作
    f:id:bascule-dev:20170703111625g:plain ↑ Androidのスクショ撮ってPCに渡してOpenCVでテンプレートマッチング→どこタップするか判定→OnにしたりOffにしたりする

Googleアカウント設定の例

けっこう泥臭くやります。

#!/usr/bin/env zsh
# キーが数字だとよくわからんので変数にいれる
KEY_HOME=3
KEY_TAB=61
KEY_ENTER=66
KEY_DOWN=20
KEY_EVENT="shell input keyevent "
PRESS_KEY_ENTER=$KEY_EVENT$KEY_ENTER
PRESS_KEY_TAB=$KEY_EVENT$KEY_TAB
PRESS_KEY_DOWN=$KEY_EVENT$KEY_DOWN

# USBで繋がってる端末ID
DEVICE=$1
S="-s $DEVICE"

ID="your_google_account"
PW="your_password"


# Google アカウント設定画面開く
adb $S shell am start -a android.settings.SYNC_SETTINGS
sleep 1.5

## [アカウント追加] - [追加]を選択
adb $S $KEY_EVENT $KEY_DOWN $KEY_DOWN $KEY_ENTER
sleep 1.5

echo "アカウント追加 選択するもの画面"
# 6回下キーを押してエンターを押す
_TMP_KEY=" "
for i in `seq 0 5`
do
    _TMP_KEY="$_TMP_KEY $KEY_DOWN"
done
echo "$KEY_EVENT $_TMP_KEY $KEY_ENTER"
adb $S $KEY_EVENT $_TMP_KEY $KEY_ENTER
sleep 3

echo "アカウント入力画面"
_TMP_KEY=" "
# タブを二回をして入力フォームを選択
for i in `seq 0 2`
do
    _TMP_KEY="$_TMP_KEY $PRESS_KEY_TAB"
done
adb $S $KEY_EVENT $_TMP_KEY
sleep 0.3

# Googleアカウント名を入力
adb $S shell input text $ID
sleep 0.3
adb $S $PRESS_KEY_ENTER
adb $S $PRESS_KEY_ENTER

sleep 3

## パスワード入力画面
adb $S shell input text $PW
adb $S $PRESS_KEY_ENTER

sleep 1

echo "終了"

できなかった

最終的にこれだけ自動化できた

最初に開発者モードにするところだけ手動で設定する

  • 開発者モードON
  • USBデバッグON

以下は自動化できた。

  • アカウント設定
    • Googleアカウント設定
    • Oculusアカウント設定
  • もろもろ端末設定
    • wifi設定
    • いろいろオフ
      • Bluetooth オフ
      • 端末同期 オフ
      • NFC オフ
    • 通知をミュートモードにする
    • 開発者モード
    • 画面 スリープにするまで10分
  • インストール
    • つくったGearVRアプリのapk
  • GearVR 設定
    • GearVR開発者モードにする
      • [アプリケーション管理] - [GearVR Service] - [ストレージを管理] - [VR Service Ver]を7回タップ

最終的には費用対効果を考えよう

Androidを2-3台しか設定しないのであれば手動設定のほうが早いですよね。

今回は数十台だったので、手作業ではミスが発生しがちなのと、自分のモチベーションが底をつくため自動化を選びました。

参考