Criar para o Android 12 com o Unity

Ao criar um projeto do Android para o 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 as Ferramentas de build do Android versão 31.0.0 e o sistema de build do Unity. Na versão 31.0.0 das Ferramentas de build do Android, o DX foi substituído pelo D8, o que causa falhas nos builds do Unity para Android.

Esse erro pode ser acionado nos seguintes cenários:

  • Fazer upgrade para a versão 1.26 das extensões do ARCore para a AR Foundation do Unity.
  • Segmentar o nível 31 do SDK do Android em qualquer projeto do Unity, independente da versão das extensões do ARCore.
  • Segmentação para o nível 30 do SDK do Android em qualquer projeto do Unity enquanto a versão 31.0.0 das Ferramentas de build estiver instalada, independentemente da versão das extensões do ARCore.

Alternativa

Estamos trabalhando com a Unity para resolver essa incompatibilidade. Enquanto isso, siga as instruções para criar um projeto destinado ao Android 12:

  1. Em Project Settings > Player > Android > Publishing Settings > Build, selecione as duas opções:

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

    Uma captura de tela mostrando as configurações de publicação, painel &quot;Build&quot; com as duas opções de modelo
do Gradle selecionadas

  2. Aplique as seguintes mudanças aos dois arquivos gerados:

    • Assets/Plugins/Android/mainTemplate.gradle
    • Assets/Plugins/Android/launcherTemplate.gradle

    Se estiver presente, remova o seguinte comentário na parte de cima do arquivo:

    // GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
    

    Em seguida, modifique compileSdkVersion e buildToolsVersion da seguinte maneira:

    buildToolsVersion '30.0.3'
    

Ao criar, o Unity vai fazer o download da versão 30.0.3 do Build-Tools e usá-la 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, que são 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 a versão 6.1.1 ou mais recente do Gradle.

  1. 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 para fazer downloads.
  2. Aplique as seguintes mudanças 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.

  1. Em Project Settings > Player > Android > Publishing Settings > Build, selecione Custom Main Manifest.

  2. Aplique as seguintes mudanças a Assets/Plugins/Android/AndroidManifest.xml:

    1. Se estiver presente, remova o seguinte comentário na parte superior do arquivo:

      <!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
      
    2. 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>