Compiler pour Android 12 avec Unity

Lorsque vous compilez 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. Depuis la version 31.0.0 d'Android Build Tools, DX a été supprimé au profit de D8, ce qui entraîne des dysfonctionnements dans les builds Unity pour Android.

Cette erreur peut se produire dans les cas suivants:

  • La mise à niveau vers ARCore Extensions pour Unity AR Foundation version 1.26
  • Cibler le niveau 31 du SDK Android dans n'importe quel projet Unity, quelle que soit la version des extensions ARCore
  • Ciblage du SDK Android niveau 30 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 travaillons avec Unity pour résoudre cette incompatibilité. En attendant, suivez les instructions pour créer un projet qui cible Android 12:

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

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

    Capture d&#39;écran montrant le volet &quot;Build Settings&quot; (Paramètres de publication) et &quot;Build&quot; (Compiler) avec les deux options Gradle &quot;Template&quot; (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échargera la version 30.0.3 des outils de compilation et l'utilisera pour compiler votre projet tout en conservant le targetSdkVersion sélectionné.

Créer des builds Gradle personnalisés

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

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

  1. Accédez à Preferences > External Tools > Android > Gradle, puis définissez le build Gradle personnalisé sur Gradle 6.1.1 ou version ultérieure. Consultez la section Outil de compilation Gradle pour les téléchargements.
  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 aux applications ciblant Android 12

Si votre application cible Android 12, vous devez déclarer explicitement l'attribut android:exported. Pour toutes les modifications apportées à Android 12, consultez Changements 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>