👋
Unity HubがインストールしたAndroid SDKでAPI levelが不足する場合 (Windows)
課題
プロジェクトが要求するAPI levelのplatform-tools
がUnityのビルトインSDKに含まれていない場合、最終的にUnityException: Required API level ~.
というエラーになります。
補足
- 新しいUnityバージョンでは、API levelが不足する場合に表示されるダイアログのアップデートを選ぶことで、この課題が自動的に解決されます。
- Unity 2021.3.14f1 (LTS)で確認
- Javaバージョンの不整合で、自動的な解決がエラーしてしまうことがあるようです。
- これは、UnityバージョンにビルトインされているJavaが使われず、パスが通してあるJavaが使われてしまうことが原因と思われます。
- 後述のJavaの実行でエラーする場合を参照してください。
補足2
別の解決例1
- できる限り新しいバージョンのUnityエディタをインストールします。
- 以下のフォルダから対応レベルのフォルダをコピーします。
C:\Program Files\Unity\Hub\Editor\<version>\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platforms
C:\Program Files\Unity\Hub\Editor\<version>\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\build-tools
別の解決例2
- Android Studioをインストールします。
- SDKマネージャでSDKのパスを確認して、
Sdk\platforms
とSdk\build-tools
から、対応レベルのフォルダを以下へコピーします。C:\Program Files\Unity\Hub\Editor\<version>\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platforms
C:\Program Files\Unity\Hub\Editor\<version>\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\build-tools
解決例
環境
- Windows 10、Windows 11
- Unity 2020.3.16f1 (LTS)、Unity 2021.3.32f1 (LTS)
- Target API Level: Android 11.0 (API level 30)
対処
- Unityの
Preference
で、ビルトインSDKのインストール先を特定します。C:\Program Files\Unity\Hub\Editor\2021.3.32f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK
- 管理者権限のあるコマンドプロンプトを開き、カレントディレクトリを
SDK
フォルダに移動して、tools\bin\sdkmanager "platform-tools" "platforms;android-33"
を実行します。- インストール状況は、
tools\bin\sdkmanager --list
で確認できます。
- インストール状況は、
Javaの実行でエラーする場合
エラーの例
>tools\bin\sdkmanager --list
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
... 5 more
- 上記コマンドの実行でJavaがエラーする場合は、ビルトインJavaにパスを通します。
path "C:\Program Files\Unity\Hub\Editor\2021.3.32f1\Editor\Data\PlaybackEngines\AndroidPlayer\OpenJdk\bin"
参考
Discussion