Unity2019は追加モジュールのAndroid SDKでsdkmanagerを実行するのが面倒


はじめに

Unity2019から追加モジュールとしてAndroid SDK/NDKをインストールできるようになりました。このAndroid SDKはplatforms;android-28しか入っていないので他のAPIレベルを使いたい時はAndroid SDKにパッケージを追加インストールが必要になります。

ですが、Windowsの場合は以下の理由によりとても分かりにくくなっています。


  • インストールパスが深い


    • Unity2019.1.4f1の場合: C:\Program Files\Unity\Hub\Editor\2019.1.4f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK



  • デフォルトのC:\Program Filesにインストールすると管理者権限が必要

そこでsdkmanager.batがあるフォルダを管理者権限のコマンドプロンプトを開くエディタ拡張を作りました。


Android SDKのフォルダを管理者権限で開くエディタ拡張

※追記

Unity2018から追加されたPackage Manager対応版も用意しました。


以下のスクリプトをAssets/Editorフォルダに保存してください。

メニューに追加されたTools/Open android sdk folder as administratorを実行するとsdkmanager.batがあるフォルダを管理者権限のコマンドプロンプトで開きます。

その後はsdkmanager "platforms;android-25"のように必要なパッケージをインストールしてください。


Assets/Editor/AndroidSDKHelper.cs

#if UNITY_2019_1_OR_NEWER && UNITY_ANDROID && (UNITY_EDITOR_WIN || UNITY_EDITOR_OSX)

using System;
using System.Diagnostics;
using System.IO;
using UnityEditor;

public static class AndroidSDKHelper
{
#if UNITY_EDITOR_WIN
[MenuItem("Tools/Open android sdk folder as administrator", false, 100)]
private static void OpenAndroidSdkFolderOnWindows()
{
var androidPlaybackEngineDirectory =
BuildPipeline.GetPlaybackEngineDirectory(BuildTarget.Android, BuildOptions.None);
var androidSdkTools = Path.Combine(androidPlaybackEngineDirectory, "SDK", "tools", "bin");
var jdkPath = Path.Combine(androidPlaybackEngineDirectory, "Tools", "OpenJDK", "Windows");
var cmd = Environment.GetEnvironmentVariable("ComSpec");

if (!Directory.Exists(androidSdkTools) || !Directory.Exists(jdkPath) || !File.Exists(cmd))
{
return;
}

var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = cmd,
Verb = "runas",
UseShellExecute = true,
Arguments = $"/K cd {androidSdkTools} & set \"JAVA_HOME={jdkPath}\""
}
};
process.Start();
}
#endif

#if UNITY_EDITOR_OSX
[MenuItem("Tools/Open android sdk folder", false, 100)]
private static void OpenAndroidSdkFolderOnMac()
{
var androidPlaybackEngineDirectory =
BuildPipeline.GetPlaybackEngineDirectory(BuildTarget.Android, BuildOptions.None);
var androidSdkTools = Path.Combine(androidPlaybackEngineDirectory, "SDK", "tools", "bin");

if (!Directory.Exists(androidSdkTools))
{
return;
}

var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "open",
Arguments = $"-a Terminal {androidSdkTools}"
}
};
process.Start();
}
#endif
}
#endif



所感

Unityをバージョンアップする度にAndroid SDKのパッケージも追加インストールが必要になるのでUnity2018以前のように個別にAndroid SDKをインストールする方が楽なのでは?

Unity2018以前のAndroid SDKのセットアップについて -> Unity - Manual: Android environment setup