0
Help us understand the problem. What are the problem?

posted at

Unityエディタからadbコマンドの使える状態でコマンドプロンプトを開く

概要

UnityでMetaQuest2向けのVRアプリを作っているとき、adb shell pm list packageadb 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を見れば分かります。
image.png

これをスクリプトから参照するには、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 アンインストールしたいがパッケージ名が分からないときに便利

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?