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と接続している端末の取得のしかた