Mit Unity für Android 12 entwickeln

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:

  1. Wählen Sie in Project Settings > Player > Android > Publishing Settings > Build beide Optionen aus:

    1. Custom Main Gradle Template,
    2. Custom Launcher Gradle Template.

    Screenshot mit den Veröffentlichungseinstellungen im Bereich „Build“, in dem beide Gradle-Vorlagenoptionen ausgewählt sind

  2. 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 und buildToolsVersion 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.

  1. 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.
  2. 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.

  1. Wählen Sie in Project Settings > Player > Android > Publishing Settings > Build Custom Main Manifest aus.

  2. Wenden Sie die folgenden Änderungen auf Assets/Plugins/Android/AndroidManifest.xml an:

    1. Falls vorhanden, entfernen Sie den folgenden Kommentar am Anfang der Datei:

      <!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
      
    2. Fügen Sie dem <activity>-Tag das Attribut android: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>