Ao criar um projeto para Android 12 (nível 31 do SDK), você pode encontrar o seguinte erro:
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
Isso é causado por uma incompatibilidade entre a versão 31.0.0 do Android Build Tools e o sistema de build do Unity. A partir da versão 31.0.0 do Android Build Tools, o DX foi removido em favor do D8, levando a falhas nos builds do Unity para Android.
Esse erro pode ocorrer nestes cenários:
- Fazendo upgrade para a versão 1.26 do ARCore Extensions para Unity's AR Foundation,
- segmentar o SDK do Android nível 31 em qualquer projeto do Unity, independentemente da versão das extensões do ARCore;
- Direcionar o SDK para Android nível 30 em qualquer projeto do Unity enquanto o Build Tools versão 31.0.0 estiver instalado, independentemente da versão do ARCore Extensions.
Alternativa
Estamos trabalhando com o Unity para resolver essa incompatibilidade. Enquanto isso, siga as instruções para criar um projeto destinado ao Android 12:
Em Project Settings > Player > Android > Publishing Settings > Build, selecione:
- Custom Main Gradle Template,
- Custom Launcher Gradle Template.
Aplique as seguintes alterações aos dois arquivos gerados:
Assets/Plugins/Android/mainTemplate.gradle
Assets/Plugins/Android/launcherTemplate.gradle
Se ele aparecer, remova o comentário a seguir da parte de cima do arquivo:
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
Em seguida, modifique
compileSdkVersion
ebuildToolsVersion
desta maneira:buildToolsVersion '30.0.3'
Durante a criação, o Unity vai fazer o download do Build-Tools versão 30.0.3 e usá-lo para criar seu projeto mantendo o targetSdkVersion
selecionado.
Criar builds personalizados do Gradle
Nas versões 2019.4, 2020.1 e 2020.2 do Unity, criadas com versões mais antigas, é necessário definir um build personalizado do Gradle para a versão 6.1.1 ou mais recente do Gradle. Você também vai precisar do Plug-in do Android para Gradle 4.0.1 ou mais recente.
Os apps destinados ao SDK 31 exigem o Gradle versão 6.1.1 ou mais recente.
- Acesse Preferences > External Tools > Android > Gradle e defina o build personalizado do Gradle como Gradle 6.1.1 ou mais recente. Consulte a ferramenta de build do Gradle (link em inglês) para fazer o download.
Aplique as seguintes alterações aos dois arquivos gerados:
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'
}
}
}
Aplicar mudanças para apps destinados ao Android 12
Se o app for direcionado ao Android 12, será necessário declarar explicitamente o atributo android:exported
. Para conferir todas as mudanças no Android 12, consulte Mudanças de comportamento no Android 12.
Em Project Settings > Player > Android > Publishing Settings > Build, selecione Custom Main Manifest.
Aplique as seguintes mudanças em
Assets/Plugins/Android/AndroidManifest.xml
:Se ele aparecer, remova o comentário a seguir da parte de cima do arquivo:
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
Adicione o atributo
android:exported
à tag<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>