概要
UnityでMetaQuest2向けのVRアプリを作っているとき、adb shell pm list package
やadb uninstall com.DefaultCompany.TestApp
などのadbコマンドを使うことがあります。
しかし、adbコマンドをサクッと使うには、Android SDKのインストールは当然として、環境変数にパスを通す作業も必要です。(環境構築めんどくさい)
Android Build SupportのモジュールにはAndroid SDKが含まれているので、adb.exeがどこかにあるはずです。
これをうまく使っていい感じにできないでしょうか?
結論
以下のようなエディタ拡張を追加すると、Window>Run Terminal (at android sdk path)
か、Ctrl+Tショートカットキーで、adbコマンドが使える状態でコマンドプロンプトを開きます。
using System.Diagnostics;
using System.IO;
using UnityEditor;
public static class TerminalExtensions
{
[MenuItem("Window/Run Terminal (at android sdk path) %t")]
private static void RunTerminalAtAdbAvailableDir()
{
var adbDir = Path.Combine(UnityEditor.Android.AndroidExternalToolsSettings.sdkRootPath, "platform-tools");
Process p = new Process();
p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
p.StartInfo.Arguments = $"/k cd /d {adbDir}";
p.Start();
}
}
解説
adb.exeのパスを知る
Android SDKの場所の設定がどうなっているかは、UnityエディタのEdit>Preferences>External Tools>Android>SDK
を見れば分かります。
これをスクリプトから参照するには、UnityEditor.Android.AndroidExternalToolsSettings.sdkRootPath
を使います。実際はSDKのフォルダ内のplatform-toolsフォルダ内にadb.exeがあるので、このパス文字列に/platform-tools
を足せばadb.exeのある場所になります。
var adbDir = Path.Combine(UnityEditor.Android.AndroidExternalToolsSettings.sdkRootPath, "platform-tools");
カレントディレクトリをadb.exeのある場所にする
パスの通っていない状態でコマンドプロンプトに「adb」と入力しても、'adb' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と返ってくるだけです。
「cd」コマンドを使って、adb.exeのある場所にカレントディレクトリを移動しましょう。
「cd /d <移動するパス>」とすることで、ドライブが異なる場合でもカレントディレクトリを移動できます。
Process p = new Process();
p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
p.StartInfo.Arguments = $"/k cd /d {adbDir}";
p.Start();
おまけ よく使うコマンド
やりたいこと | adbコマンド | 備考 |
---|---|---|
APKのインストール | adb install -r <apkファイルパス> |
-r で上書き |
APKのアンインストール | adb uninstall com.hoge.fuga |
com.hoge.fugaはパッケージ名 |
インストール済みアプリ一覧の確認 | adb shell pm list package |
アンインストールしたいがパッケージ名が分からないときに便利 |