Cuando compiles un proyecto de Android orientado 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 provocó fallas en las compilaciones de Unity para Android.
Este error puede activarse en las siguientes situaciones:
- Actualización a Extensiones de ARCore para AR Foundation de Unity versión 1.26,
- Se orienta al nivel 31 del SDK de Android en cualquier proyecto de Unity, independientemente de la versión de las extensiones de ARCore.
- El SDK de Android se orienta al nivel 30 en cualquier proyecto de Unity mientras se instala la versión 31.0.0 de las herramientas de compilación, independientemente de la versión de las extensiones de ARCore.
Solución alternativa
Estamos trabajando con Unity para resolver esta incompatibilidad. Mientras tanto, sigue las instrucciones para compilar un proyecto orientado a Android 12:
En Project Settings > Player > Android > Publishing Settings > Build, selecciona estas dos opciones:
- Custom Main Gradle Template,
- Custom Launcher Gradle Template.
Aplica los siguientes cambios a los dos archivos generados:
Assets/Plugins/Android/mainTemplate.gradle
Assets/Plugins/Android/launcherTemplate.gradle
Si aparece, quita el siguiente comentario de 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'
Cuando compiles, Unity descargará la versión 30.0.3 de las herramientas de compilación y la usará para compilar tu proyecto mientras mantienes el targetSdkVersion
seleccionado.
Cómo crear compilaciones de Gradle personalizadas
En las versiones 2019.4, 2020.1 y 2020.2 de Unity, que se compilan con versiones anteriores, deberás configurar una compilación de Gradle personalizada según 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 orientadas 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 personalizada de Gradle como Gradle 6.1.1 o una versión posterior. Consulta la herramienta de compilación de Gradle para conocer las descargas.
Aplica los siguientes cambios a los dos 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 las 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 aparece, quita el siguiente comentario de 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>