Cuando compiles un proyecto de Android que se oriente a Android 12 (nivel de SDK 31), es posible que encuentres el siguiente error:
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
Esto se debe a una incompatibilidad entre la versión 31.0.0 de las herramientas de compilación de Android y el sistema de compilación de Unity. A partir de la versión 31.0.0 de las herramientas de compilación de Android, se quitó DX en favor de D8, lo que genera fallas en las compilaciones de Unity para Android.
Este error puede activarse en las siguientes situaciones:
- Actualización a la versión 1.26 de AR Foundation de ARCore Extensions for Unity
- Segmentación para el nivel 31 del SDK de Android en cualquier proyecto de Unity, independientemente de la versión de Extensiones de ARCore
- Segmentación para el nivel 30 del SDK de Android en cualquier proyecto de Unity mientras se instala la versión 31.0.0 de Build Tools, independientemente de la versión de ARCore Extensions
Solución alternativa
Estamos trabajando con Unity para resolver esta incompatibilidad. Mientras tanto, sigue las instrucciones para compilar un proyecto que se oriente a Android 12:
En Project Settings > Player > Android > Publishing Settings > Build, selecciona ambas opciones:
- Custom Main Gradle Template,
- Custom Launcher Gradle Template.
Aplica los siguientes cambios a ambos archivos generados:
Assets/Plugins/Android/mainTemplate.gradle
Assets/Plugins/Android/launcherTemplate.gradle
Si está presente, quita el siguiente comentario en la parte superior del archivo:
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
Luego, modifica
compileSdkVersion
ybuildToolsVersion
de la siguiente manera:buildToolsVersion '30.0.3'
Durante la compilación, Unity descargará la versión 30.0.3 de Build-Tools y la usará para compilar tu proyecto y, al mismo tiempo, mantener el targetSdkVersion
seleccionado.
Crea compilaciones personalizadas de Gradle
En las versiones de Unity 2019.4, 2020.1 y 2020.2, que se compilan con versiones anteriores, deberás configurar una compilación de Gradle personalizada en la versión 6.1.1 de Gradle o una posterior. También necesitarás el complemento de Android para Gradle 4.0.1 o una versión posterior.
Las apps que se orientan al SDK 31 requieren la versión 6.1.1 de Gradle o una posterior.
- Ve a Preferences > External Tools > Android > Gradle y configura la compilación de Gradle personalizada en Gradle 6.1.1 o una versión posterior. Consulta Herramienta de compilación de Gradle para ver las descargas.
Aplica los siguientes cambios a ambos archivos generados:
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'
}
}
}
Aplica cambios para apps orientadas a Android 12
Si tu app está orientada a Android 12, debes declarar explícitamente el atributo android:exported
. Para ver todos los cambios en Android 12, consulta Cambios de comportamiento en Android 12.
En Project Settings > Player > Android > Publishing Settings > Build, selecciona Custom Main Manifest.
Aplica los siguientes cambios a
Assets/Plugins/Android/AndroidManifest.xml
:Si está presente, quita el siguiente comentario en la parte superior del archivo:
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
Agrega el atributo
android:exported
a la etiqueta<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>