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

Das liegt an einer Inkompatibilität zwischen der Android Build Tools-Version 31.0.0 und dem Unity-Build-System. Seit der Version 31.0.0 der Android Build Tools wurde DX zugunsten von D8 entfernt, was zu Fehlern bei Unity-Builds für Android geführt hat.

Dieser Fehler kann in den folgenden Fällen auftreten:

  • Upgrade auf ARCore Extensions für Unitys AR Foundation-Version 1.26,
  • Ausrichtung auf Android SDK-Level 31 in jedem Unity-Projekt, unabhängig von der ARCore Extensions-Version
  • Targeting auf Android SDK-Level 30 in einem Unity-Projekt, während die Build Tools-Version 31.0.0 installiert ist, unabhängig von der ARCore Extensions-Version.

Problemumgehung

Wir arbeiten mit Unity zusammen, um diese Inkompatibilität zu beheben. In der Zwischenzeit können Sie der Anleitung zum Erstellen eines Projekts folgen, das auf Android 12 ausgerichtet ist:

  1. Wählen Sie unter Project Settings > Player > Android > Publishing Settings > Build Folgendes aus:

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

    Screenshot der Veröffentlichungseinstellungen, Bereich „Build“ mit den beiden ausgewählten Gradle-Vorlagenoptionen

  2. Wenden Sie die folgenden Änderungen auf beide generierten Dateien an:

    • Assets/Plugins/Android/mainTemplate.gradle
    • Assets/Plugins/Android/launcherTemplate.gradle

    Entfernen Sie den folgenden Kommentar oben in der Datei, falls er vorhanden ist:

    // 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 die Build-Tools-Version 30.0.3 herunter und verwendet sie, um Ihr Projekt zu erstellen und dabei die ausgewählte targetSdkVersion beizubehalten.

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. Gehen Sie zu Preferences > External Tools > Android > Gradle und legen Sie den benutzerdefinierten Gradle-Build auf Gradle 6.1.1 oder höher fest. 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 anwenden, die auf Android 12 ausgerichtet sind

Wenn Ihre App auf Android 12 ausgerichtet ist, müssen Sie das Attribut android:exported explizit deklarieren. Alle Änderungen in Android 12 finden Sie unter Verhaltensänderungen unter Android 12.

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

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

    1. Entfernen Sie den folgenden Kommentar oben in der Datei, falls er vorhanden ist:

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