Android 12(SDK レベル 31)をターゲットとする Android プロジェクトをビルドしようとすると、次のエラーが発生することがあります。
Could not determine the dependencies of task ':launcher:compileDebugJavaWithJavac'.
> Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager.
> Configure project :launcher
WARNING: The option 'android.enableR8' is deprecated and should not be used anymore.
It will be removed in a future version of the Android Gradle plugin, and will no longer allow you to disable R8.
Build-tool 31.0.0 is missing DX at <android-sdk-path>/sdk/build-tools/31.0.0/dx
File ~/.android/repositories.cfg could not be loaded.
Build-tool 31.0.0 is missing DX at <android-sdk-path>/sdk/build-tools/31.0.0/dx
これは、Android Build Tools バージョン 31.0.0 と Unity ビルドシステムとの間の互換性がないことが原因です。Android Build Tools バージョン 31.0.0 以降、D8 に置き換えて DX が削除されました。これにより、Android 用の Unity ビルドが破損します。
このエラーは、次のシナリオでトリガーされる可能性があります。
- Unity の AR Foundation バージョン 1.26 向けの ARCore 拡張機能へのアップグレード、
- ARCore 拡張機能のバージョンに関係なく、Unity プロジェクトで Android SDK レベル 31 をターゲットにする。
- ARCore Extensions のバージョンに関係なく、Build Tools バージョン 31.0.0 がインストールされている Unity プロジェクトで Android SDK レベル 30 をターゲットにする。
対応策
Google は Unity と協力して、この非互換性の解決に取り組んでいます。まずは、次の手順に沿って Android 12 をターゲットとするプロジェクトをビルドしてください。
Project Settings > Player > Android > Publishing Settings > Build で、次の両方を選択します。
- Custom Main Gradle Template,
- Custom Launcher Gradle Template.
生成された両方のファイルに次の変更を適用します。
Assets/Plugins/Android/mainTemplate.gradle
Assets/Plugins/Android/launcherTemplate.gradle
次のコメントが含まれている場合は、ファイルの先頭にある次のコメントを削除します。
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
次に、
compileSdkVersion
とbuildToolsVersion
を次のように変更します。buildToolsVersion '30.0.3'
ビルド時に、Unity は Build-Tools バージョン 30.0.3 をダウンロードし、選択した targetSdkVersion
を維持しながら、それを使用してプロジェクトをビルドします。
カスタム Gradle ビルドを作成する
古いバージョンでビルドされた Unity バージョン 2019.4、2020.1、2020.2 では、カスタム Gradle ビルドを Gradle バージョン 6.1.1 以降に設定する必要があります。また、Android Gradle プラグイン 4.0.1 以降も必要です。
SDK 31 をターゲットとするアプリには、Gradle バージョン 6.1.1 以降が必要です。
- Preferences > External Tools > Android > Gradle に移動し、カスタム Gradle ビルドを Gradle 6.1.1 以降に設定します。ダウンロードについては、Gradle ビルドツールをご覧ください。
生成された両方のファイルに次の変更を適用します。
Assets/Plugins/Android/mainTemplate.gradle
Assets/Plugins/Android/launcherTemplate.gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
// Must be Android Gradle Plugin 4.0.1 or later. For a list of
// compatible Gradle versions refer to:
// https://developer.android.com/studio/releases/gradle-plugin
classpath 'com.android.tools.build:gradle:4.0.1'
}
}
allprojects {
repositories {
google()
jcenter()
flatDir {
dirs 'libs'
}
}
}
Android 12 をターゲットとするアプリに変更を適用する
Android 12 をターゲットとするアプリの場合は、android:exported
属性を明示的に宣言する必要があります。Android 12 のすべての変更点については、Android 12 での動作の変更点をご覧ください。
Project Settings > Player > Android > Publishing Settings > Build で Custom Main Manifest を選択します。
次の変更を
Assets/Plugins/Android/AndroidManifest.xml
に適用します。次のコメントが含まれている場合は、ファイルの先頭にある次のコメントを削除します。
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
android:exported
属性を<activity>
タグに追加します。<application> <activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> </application>