概要
Android SDKに含まれるadb
コマンドをUnityEditor上から実行する方法に関するお話しです。
結論
スクリプトリファレンスには記載が無いですが、実はUnityEditor.Android
配下にADB
クラスが存在しているのでそれを使えば簡単にUnityEditor上からadbコマンドを実行することが可能です。
スクリプトリファレンス
ADB
class in UnityEditor.Android
説明
UnityEditorからadbコマンドを実行する為のシングルトンクラスです。
Public関数
GetInstance
public static ADB GetInstance()
説明
ADBクラスのインスタンスを取得します。 ※ADBクラスはシングルトンであり、newではなくこちらのAPIを使用してインスタンスを取得します。
GetADBPath
public string GetADBPath()
説明
UnityEditorが参照しているadbへのパスを取得します。
Run
public string Run(string[] command,string errorMsg)
パラメータ
command | adbコマンドに渡す引数 |
errorMsg | エラーが発生した場合に表示する文字列 |
説明
引数で指定したコマンドをadbで実行します。
実行例
接続されているデバイス上で(X,Y)=(100,200)のスクリーン座標でTouchイベントを発生させる
var x = 100; var y = 200; ADB.GetInstance().Run(new string[] { "shell", "input", "touchscreen", "motionevent", "DOWN", $"{x}", $"{y}" }, "");
Runの引数が文字列の配列になっている為、コマンド単位で区切っていますが、string.Join(" ", command)
としているだけなので、初めから連結して渡しても問題ありません。
接続されているデバイス上でバックボタン(ESCAPE)イベントを発生させる
ADB.GetInstance().Run(new string[] { "shell","input","keyboard","keyevent","4" }, "");
AndroidDeveloperリファレンスによるとESCAPEのキーコードは4
です。
その他
エラーが出た場合、他の誰かがadbを実行している可能性が高いです。 タスクマネージャーからadbのプロセスをKILLしてから改めて試してみてください、
以上