Androidのセットアップ、実は自動化できます。
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操作
↑ 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 "終了"
できなかった
- Bluetoothのオフ
- https://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html?hl=ja
- BluetoothはOnにしかできない
- ならばAndroidアプリを作ってjava側からオフにしようとしたが、そもそもオフにするAPIがなかった。
最終的にこれだけ自動化できた
最初に開発者モードにするところだけ手動で設定する
- 開発者モードON
- USBデバッグON
以下は自動化できた。
- アカウント設定
- Googleアカウント設定
- Oculusアカウント設定
- もろもろ端末設定
- インストール
- つくったGearVRアプリのapk
- GearVR 設定
- GearVR開発者モードにする
- [アプリケーション管理] - [GearVR Service] - [ストレージを管理] - [VR Service Ver]を7回タップ
- GearVR開発者モードにする
最終的には費用対効果を考えよう
Androidを2-3台しか設定しないのであれば手動設定のほうが早いですよね。
今回は数十台だったので、手作業ではミスが発生しがちなのと、自分のモチベーションが底をつくため自動化を選びました。
参考
- ADB Shell メモ - Qiita
- できることがザッと書いてある
- Android Debug Bridge | Android Studio
- 公式doc
- パソコンからAndroid端末を操作する時に使えるコマンド(ADBなど) | AndMem
- コマンド解説
- 【デバッグ接続】タッチやキー入力などの操作を自動化する「input」コマンド | あんどろいどスマート
- 具体的なinputコマンドの書きかた
- Android adbを使いこなす | TechBooster
- PCと接続している端末の取得のしかた