1
1

Unity HubがインストールしたAndroid SDKでAPI levelが不足する場合 (Windows)

Last updated at Posted at 2021-08-18

課題

プロジェクトが要求する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\platformsSdk\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"

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1