Beim Erstellen eines Android-Projekts, das auf Android 12 (SDK-Level 31) ausgerichtet ist, kann der folgende Fehler auftreten:
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
Der Grund dafür ist eine Inkompatibilität zwischen Android Build Tools Version 31.0.0 und dem Unity-Build-System. Ab Android Build Tools-Version 31.0.0 wurde DX zugunsten von D8 entfernt, was zu Fehlern in Unity-Builds für Android führt.
Dieser Fehler kann in folgenden Fällen ausgelöst werden:
- Upgrade auf ARCore-Erweiterungen für AR Foundation Version 1.26 von Unity
- Sie ist in einem beliebigen Unity-Projekt auf Android SDK-Level 31 ausgerichtet, unabhängig von der Version der ARCore-Erweiterungen.
- Das Targeting ist auf Android SDK-Level 30 in einem beliebigen Unity-Projekt ausgerichtet, während Build Tools Version 31.0.0 installiert ist, unabhängig von der Version der ARCore-Erweiterungen.
Problemumgehung
Wir arbeiten gemeinsam mit Unity daran, diese Inkompatibilität zu beheben. In der Zwischenzeit kannst du der Anleitung folgen, um ein Projekt zu erstellen, das auf Android 12 ausgerichtet ist:
Wählen Sie in Project Settings > Player > Android > Publishing Settings > Build beide Optionen aus:
- Custom Main Gradle Template,
- Custom Launcher Gradle Template.
Wenden Sie die folgenden Änderungen auf beide generierten Dateien an:
Assets/Plugins/Android/mainTemplate.gradle
Assets/Plugins/Android/launcherTemplate.gradle
Falls vorhanden, entfernen Sie den folgenden Kommentar am Anfang der Datei:
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
Ändern Sie dann
compileSdkVersion
undbuildToolsVersion
so:buildToolsVersion '30.0.3'
Beim Erstellen lädt Unity Build-Tools Version 30.0.3 herunter und verwendet sie zum Erstellen Ihres Projekts unter Beibehaltung der ausgewählten targetSdkVersion
.
Benutzerdefinierte Gradle-Builds erstellen
Bei den Unity-Versionen 2019.4, 2020.1 und 2020.2, die mit älteren Versionen erstellt wurden, müssen Sie einen benutzerdefinierten Gradle-Build auf Gradle-Version 6.1.1 oder höher festlegen. Außerdem benötigen Sie das Android-Gradle-Plug-in 4.0.1 oder höher.
Für Apps, die auf SDK 31 ausgerichtet sind, ist Gradle Version 6.1.1 oder höher erforderlich.
- Rufe Preferences > External Tools > Android > Gradle auf und setze den benutzerdefinierten Gradle-Build auf Gradle 6.1.1 oder höher. Downloads finden Sie unter Gradle-Build-Tool.
Wenden Sie die folgenden Änderungen auf beide generierten Dateien an:
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'
}
}
}
Änderungen für Apps übernehmen, die auf Android 12 ausgerichtet sind
Wenn deine App auf Android 12 ausgerichtet ist, musst du das Attribut android:exported
explizit deklarieren. Informationen zu allen Änderungen in Android 12 findest du unter Verhaltensänderungen unter Android 12.
Wählen Sie in Project Settings > Player > Android > Publishing Settings > Build Custom Main Manifest aus.
Wenden Sie die folgenden Änderungen auf
Assets/Plugins/Android/AndroidManifest.xml
an:Falls vorhanden, entfernen Sie den folgenden Kommentar am Anfang der Datei:
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
Fügen Sie dem
<activity>
-Tag das Attributandroid:exported
hinzu:<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>