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:
Dans Project Settings > Player > Android > Publishing Settings > Build, sélectionnez les deux options suivantes:
- Custom Main Gradle Template,
- Custom Launcher Gradle Template.
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
etbuildToolsVersion
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.
- 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.
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.
Dans Project Settings > Player > Android > Publishing Settings > Build, sélectionnez Custom Main Manifest.
Appliquez les modifications suivantes à
Assets/Plugins/Android/AndroidManifest.xml
:Le cas échéant, supprimez le commentaire suivant en haut du fichier:
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
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>