Compiler pour Android 12 avec Unity

Lorsque vous créez un projet Android qui cible Android 12 (niveau de SDK 31), vous pouvez rencontrer l'erreur suivante:

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

Cela est dû à une incompatibilité entre la version 31.0.0 d'Android Build Tools et le système de compilation Unity. À partir de la version 31.0.0 d'Android Build Tools, DX a été supprimé au profit de D8, ce qui a entraîné des erreurs dans les builds Unity pour Android.

Cette erreur peut se produire dans les scénarios suivants:

  • Mise à niveau vers les extensions ARCore pour Unity AR Foundation version 1.26
  • Ciblage du niveau 31 du SDK Android dans n'importe quel projet Unity, quelle que soit la version des extensions ARCore
  • Ciblage du niveau 30 du SDK Android dans n'importe quel projet Unity lorsque la version 31.0.0 de Build Tools est installée, quelle que soit la version des extensions ARCore.

Solution

Nous collaborons avec Unity pour résoudre cette incompatibilité. En attendant, suivez les instructions pour créer un projet ciblant Android 12:

  1. Dans Project Settings > Player > Android > Publishing Settings > Build, sélectionnez les deux:

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

    Capture d&#39;écran montrant les paramètres de publication, le volet de compilation avec les deux options de modèle Gradle sélectionnées

  2. Appliquez les modifications suivantes aux deux fichiers générés:

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

    Le cas échéant, supprimez le commentaire suivant en haut du fichier:

    // GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
    

    Modifiez ensuite compileSdkVersion et buildToolsVersion comme suit:

    buildToolsVersion '30.0.3'
    

Lors de la compilation, Unity télécharge la version 30.0.3 de Build-Tools et l'utilise pour compiler votre projet tout en conservant l'targetSdkVersion sélectionnée.

Créer des builds Gradle personnalisés

Sur les versions 2019.4, 2020.1 et 2020.2 d'Unity, qui sont compilées avec d'anciennes versions, vous devez définir un build Gradle personnalisé sur Gradle 6.1.1 ou version ultérieure. Vous aurez également besoin du plug-in Android Gradle 4.0.1 ou version ultérieure.

Les applications ciblant le SDK 31 nécessitent Gradle 6.1.1 ou version ultérieure.

  1. Accédez à Preferences > External Tools > Android > Gradle, puis définissez la compilation Gradle personnalisée sur Gradle 6.1.1 ou version ultérieure. Pour les téléchargements, consultez Outil de compilation Gradle.
  2. Appliquez les modifications suivantes aux deux fichiers générés:

    • 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'
      }
   }
}

Appliquer les modifications pour les applications ciblant Android 12

Si votre application cible Android 12, vous devez déclarer explicitement l'attribut android:exported. Pour connaître toutes les modifications apportées à Android 12, consultez la section Modifications de comportement dans Android 12.

  1. Dans Project Settings > Player > Android > Publishing Settings > Build, sélectionnez Custom Main Manifest.

  2. Appliquez les modifications suivantes à Assets/Plugins/Android/AndroidManifest.xml:

    1. Le cas échéant, supprimez le commentaire suivant en haut du fichier:

      <!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
      
    2. Ajoutez l'attribut android:exported à la balise <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>