Plug-in do Android para Gradle 8.0.0 (abril de 2023)

O Plug-in do Android para Gradle 8.0.0 é uma versão principal que inclui uma variedade de novos recursos e melhorias.

Compatibilidade

Versão mínima Versão padrão Observações
Gradle 8.0 8.0 Para saber mais, consulte Como atualizar o Gradle.
Ferramentas de build do SDK 30.0.3 30.0.3 Instale ou configure as Ferramentas de build do SDK.
NDK N/A 25.1.8937393 Instale ou configure uma versão diferente do NDK.
JDK 17 17 Para saber mais, consulte Como configurar a versão do JDK.

Versões de patch

Confira abaixo uma lista das versões de patch do Plug-in do Android para Gradle 8.0.

Plug-in do Android para Gradle 8.0.2 (maio de 2023)

Para conferir uma lista de bugs corrigidos no AGP 8.0.2, consulte os problemas fechados do Android Studio 2022.2.1.

Plug-in do Android para Gradle 8.0.1 (maio de 2023)

Esta atualização secundária inclui as seguintes correções de bugs:

Problemas corrigidos
Erro: "No VersionRequirement with the given id in the table" depois de fazer upgrade do AGP 7.2.2 para 7.4.0
R8 NullPointerException em markTypeAsLive AGP 7.4.1
[R8 4.0.53] Falha de verificação de classe rígida no Android 11

Mudança que interrompe o serviço: namespace obrigatório no script de build do módulo

Defina o namespace no arquivo build.gradle.kts do módulo, e não no arquivo de manifesto. Você pode começar a usar a propriedade DSL namespace a partir do AGP 7.3. Para saber mais, consulte Definir um namespace.

Ao migrar para a DSL de namespace, esteja ciente dos seguintes problemas:

  • As versões anteriores do AGP inferem o namespace de teste do namespace principal ou do ID do aplicativo de forma incorreta em alguns casos. O assistente de upgrade do AGP bloqueia o upgrade se ele detectar que o namespace principal e de teste do projeto são iguais. Se o upgrade for bloqueado, você vai precisar mudar testNamespace manualmente e modificar o código-fonte de acordo.
  • Depois que você muda o namespace de teste, é possível que seu código seja compilado, mas os testes instrumentados falhem no momento da execução. Isso pode acontecer se o código-fonte do teste instrumentado referenciar um recurso definido nas androidTest e nas origens do app.

Para mais informações, consulte o comentário 19 do problema 191813691.

Mudanças importantes: valores padrão da opção de build

A partir do AGP 8.0, os valores padrão dessas flags foram alterados para melhorar o desempenho do build. Para receber ajuda com a adaptação do código para oferecer suporte a algumas dessas mudanças, use o Assistente de upgrade do AGP (Tools > AGP Upgrade Assistant). O Assistente de upgrade orienta você na atualização do código para acomodar o novo comportamento ou definir flags para preservar o comportamento anterior.

Sinalização Novo valor padrão Valor padrão anterior Observações
android.defaults.buildfeatures.buildconfig false true O AGP 8.0 não gera BuildConfig por padrão. É necessário especificar essa opção usando o DSL nos projetos em que você precisa.
android.defaults.buildfeatures.aidl false true Por padrão, o AGP 8.0 não ativa o suporte à AIDL. É necessário especificar essa opção usando o DSL nos projetos em que você precisa. Essa flag será removida no AGP 9.0.
android.defaults.buildfeatures.renderscript false true O AGP 8.0 não ativa o suporte ao RenderScript por padrão. É necessário especificar essa opção usando o DSL nos projetos em que você precisa. Essa flag será removida no AGP 9.0.
android.nonFinalResIds true false O AGP 8.0 gera classes R com campos não finais por padrão.
android.nonTransitiveRClass true false O AGP 8.0 gera classes R para recursos definidos apenas no módulo atual.
android.enableR8.fullMode true false O AGP 8.0 ativa o modo completo do R8 por padrão. Para saber mais, consulte Modo completo do R8.

Mudanças importantes: valores de opção de build obrigatórios

A partir do AGP 8.0, não é mais possível mudar os valores dessas flags. Se você as especificar no arquivo gradle.properties, o valor será ignorado e o AGP imprimirá avisos.

Sinalização Valor obrigatório Observações
android.dependencyResolutionAtConfigurationTime.warn true O AGP 8.0 emite um aviso se detectar a resolução de configuração durante a fase de configuração, porque isso afeta negativamente os tempos de configuração do Gradle.
android.r8.failOnMissingClasses true O AGP 8.0 falha nos builds que usam o R8 se houver classes ausentes para garantir uma melhor otimização de DEX. Para resolver isso, adicione as bibliotecas ausentes ou as regras keep do -dontwarn. Para mais detalhes, consulte Avisos de classes ausentes no redutor R8.
android.testConfig.useRelativePath true Quando o suporte ao uso de recursos, assets e manifestos Android em testes de unidade está ativado, o AGP 8.0 gera um arquivo test_config.properties que contém apenas caminhos relativos. Isso garante que os testes de unidade do Android sempre possam usar o cache de build do Gradle.
android.useNewJarCreator true O AGP usa a biblioteca Zipflinger ao criar arquivos JAR para melhorar o desempenho do build.
android.bundletool.includeRepositoriesInDependencyReport true Quando a adição de informações de dependência do SDK em AABs e APKs está ativada, o AGP 8.0 também adiciona uma lista de repositórios de projeto a essas informações. Para saber mais, consulte Informações de dependência do Play Console.
android.enableArtProfiles true Os perfis de referência agora são sempre gerados. Consulte Perfis de referência para saber mais.
android.enableNewResourceShrinker true Usar a nova implementação do redutor de recursos por padrão. O novo compressor de recursos inclui suporte a recursos dinâmicos.
android.enableSourceSetPathsMap true Usado para computar mapeamentos de caminho de recurso relativo, para que os builds do Gradle sejam atualizados com mais frequência.
android.cacheCompileLibResources true Os recursos de biblioteca compilados agora podem ser armazenados em cache por padrão, porque o Gradle rastreia arquivos de recursos em relação ao local do projeto. É necessário que android.enableSourceSetPathsMap esteja ativado.
android.disableAutomaticComponentCreation true O AGP 8.0 não cria um SoftwareComponent por padrão. Em vez disso, o AGP cria SoftwareComponents apenas para variantes configuradas para serem publicadas usando a DSL de publicação.

Nova flag estável para o perfil de execução

O AGP inclui a nova flag android.settings.executionProfile. Use essa sinalização para substituir o perfil de execução padrão de SettingsExtension. Para saber mais, consulte a documentação do plug-in de configurações.

Para conferir as flags experimentais, consulte as notas da versão de pré-lançamento.

Atribuição de propriedade lenta do Kotlin sem suporte

Se você estiver usando a DSL do Kotlin do Gradle para seus scripts de build, o Android Studio e o AGP 8.0 não oferecem suporte à atribuição de propriedade experimental usando o operador =. Para mais informações sobre esse recurso, consulte as notas da versão e a documentação.

Categorias de tarefas do Build Analyzer

A partir do Android Studio Flamingo, o Build Analyzer tem uma nova visualização padrão para tarefas que afetam a duração do build. Se o projeto usar o AGP 8.0 ou mais recente, em vez de mostrar tarefas individualmente, o Build Analyzer vai agrupá-las por categoria. Por exemplo, tarefas específicas para recursos do Android, Kotlin ou Dexing são agrupadas e classificadas por duração do build. Isso facilita saber qual categoria tem mais impacto no tempo de build. A expansão de cada categoria mostra uma lista das tarefas correspondentes. Para exibir tarefas individualmente, sem agrupar, use o menu suspenso Agrupar por.

Crie categorias de tarefas do Build Analyzer.

Novo plug-in de configurações

O AGP 8.0.0-alpha09 introduz o novo plug-in de configurações. O plug-in de configurações permite centralizar configurações globais (que se aplicam a todos os módulos) em um só lugar para que você não precise copiar e colar as configurações em vários módulos. Além disso, você pode usar o plug-in de configurações para criar perfis de execução da ferramenta ou instruções diferentes sobre como executar uma ferramenta e alternar entre elas.

Para usar o plug-in de configurações, aplique-o no arquivo settings.gradle:

apply plugin 'com.android.settings'

Centralizar as configurações globais

Para configurar configurações globais, use o novo bloco android no arquivo settings.gradle. Veja um exemplo:

android {
  compileSdk 31
  minSdk 28
  ...
}

Perfis de execução de ferramentas

O plug-in de configurações também permite criar perfis de execução para algumas ferramentas. Um perfil de execução determina como uma ferramenta é executada. É possível selecionar diferentes perfis de execução dependendo do ambiente. Em um perfil de execução, você pode definir argumentos JVM para uma ferramenta e configurá-la para execução em um processo separado. No momento, só há suporte para a ferramenta R8.

Crie perfis de execução e defina o perfil de execução padrão no arquivo settings.gradle, conforme mostrado no exemplo a seguir:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

Para substituir o perfil padrão, selecione outro perfil usando a propriedade android.experimental.settings.executionProfile no arquivo gradle.properties:

android.experimental.settings.executionProfile=high

Também é possível definir essa propriedade usando a linha de comando, que permite configurar diferentes fluxos de trabalho. Por exemplo, se você tiver um fluxo de trabalho de integração contínua, use a linha de comando para mudar o perfil de execução sem precisar mudar o arquivo settings.gradle:

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

O JDK 17 é necessário para executar o AGP 8.0.

Ao usar o Plug-in do Android para Gradle 8.0 para criar seu app, o JDK 17 agora é necessário para executar o Gradle. O Android Studio Flamingo inclui o JDK 17 e configura o Gradle para usá-lo por padrão. Isso significa que a maioria dos usuários do Android Studio não precisa fazer nenhuma mudança de configuração nos projetos.

Se você precisar definir a versão do JDK usada pelo AGP no Android Studio manualmente, use o JDK 17 ou mais recente.

Ao usar o AGP, independente do Android Studio, faça upgrade da versão do JDK configurando a variável de ambiente JAVA_HOME ou a opção da linha de comando -Dorg.gradle.java.home para o diretório de instalação do JDK 17.

Problemas corrigidos

Plug-in do Android para Gradle 8.0.0

Problemas corrigidos
Plug-in do Android para Gradle
Erro de build na tarefa MergeResources.
O uso de JavaPluginConvention e HasConvention foi descontinuado.
Local do arquivo incorreto e inconsistente com a nova API de transformação.
O Plug-in do Android para Gradle não pode usar a função descontinuada GUtil.toWords(string).
O Plug-in do Android para Gradle não pode usar a função ConfigureUtil.configure(closure, target) descontinuada.
Atualização de testes do AGP para usar o KGP 1.7.20-Beta.
Falha do Gradle 7.4 (não era possível criar uma instância do AnalyticsService).
Nova "constante de enumeração desconhecida" do javac no AGP 7.4.0-alpha09.
A configuração MergeGeneratedProguardFilesCreationAction é lenta, mesmo com o armazenamento em cache da configuração ativado.
[AGP] Adicionar o diretório de origem gerado ao modelo de ambiente de desenvolvimento integrado (API Variant).
O uso de JavaPluginConvention e HasConvention foi descontinuado.
Não adicionar ignorewarnings ao R8 por padrão.
Avisar quando não houver arquivos ProGuard.
O AGP 7.3.0 interrompe a sincronização do Gradle para projetos da plataforma Gradle.
Biblioteca apksig: ApkVerifier$Result.getV4SchemeSigners() está marcada como particular.
Se a cobertura não estiver ativada, a configuração androidJacocoAnt é interrompida.
Usar @IntDef em um componente de biblioteca não gera anotations.zip no aar.
Não foi possível encontrar um supertipo comum para e .
Adicionar uma versão da propriedade Gradle de LINT_PRINT_STACKTRACE=true.
Artefatos obsoletos do Prefab estão sendo empacotados em AAR.
Migrar da propriedade de destino para a propriedade outputLocation com o objetivo de resolver o aviso de descontinuação e se preparar para o Gradle 9.0.
Considerar a sinalização `--release` ao configurar a tarefa JavaCompile.
[AGP-7.3.0-beta03] A ShrinkResourcesNewShrinkerTask falha quando há uma linha vazia após a declaração de XML.
O destino do lintVital é executado por padrão em uma variante de depuração.
Avisar quando não houver arquivos ProGuard.
O AGP tenta adicionar kotlinOptions.freeCompilerArgs na fase de execução da tarefa.
Falha na sincronização do Gradle. Falha na sincronização: motivo desconhecido.
DependencyReportTask é incompatível com o cache de configuração.
Substituir recursos com resValue em build.gradle leva a um erro: recursos duplicados.
O tipo de build "debug" tem uma chave de assinatura padrão, enquanto outros não têm.
O uso de recursos dinâmicos e a redução de recursos causa falha no ambiente de execução.
O tipo de build "debug" tem uma chave de assinatura padrão, enquanto outros não têm.
Diretório de origem gerado listado como diretório Java no provedor de origem principal do modelo lint.
O Gradle 8.0-milestone-2 causa exceção no AGP.
Otimização para a combinação de manifestos de apps e bibliotecas.
Adicionar o gradle-settings-api à geração do javadoc.
Nova "constante de enumeração desconhecida" do javac no AGP 7.4.0-alpha09.
O AGP 7.4.0-alpha09 gera builds que não são enviados ao Firebase App Distribution.
O lint.xml nos módulos não é considerado para a verificação UP-TO-DATE das tarefas do lint.
Problema com o Plug-in do Android para Gradle 7.0+ e os testes do Android: não é possível encontrar o recurso: id.
configureCMakeDebug falha com exceção de ponteiro nulo.
Upgrade do projeto de IllegalAccessError para AS2022.2.1.5 e FireBasePerfPlugin.
A sincronização falha com o erro criptográfico "A coleção não contém nenhum elemento que corresponda ao predicado".
A API de instrumentação não transforma dependências de arquivos locais.
Erro "AnnotationProcessorOptions.arguments are queried" ao atualizar para 7.4 Beta 1.
Mover plug-ins públicos do Gradle para gradle-api e remover BasePlugin.getExtension.
r8.jvmArgs não são usados.
JDK17 como a versão mínima necessária para o AGP.
O AGP 8.0.0 A8 quebra os perfis de referência.
Mudança de "compileSdkVersion" para "compileSdk" na mensagem CheckAarMetadataTask no AGP 8.0.
O AGP 7.4.0-rc01 causa um erro na API Variant com a mensagem "Querying the mapped value of map(provider(java.util.Set)) before task '...' has completed is not supported".
Problemas de "com.android.build.gradle.tasks.ShaderCompile" com o cache de configuração.
Adicionar recursos do Java usando as APIs AGP interrompe o cache de configuração.
O plug-in do lint não faz parte da gradle-api.
O DexingFileDependenciesTask.outputKeepRules é um diretório, mas está marcado como um OutputFile.
O upgrade para o AGP 7.4 resulta em um StackOverflowError.
O processDebugUnitTestManifest falha com marcadores de posição de manifesto para variantes de teste.
O lint acessa informações sobre os conjuntos de origem sem dependências.
O erro de build referencia o nível 34 da API, que não existe.
Mensagem "We recommend using a newer Android Gradle plugin" (Recomendamos o uso de um Plug-in do Android para Gradle mais recente) quando não há uma versão mais recente
android.injected.testOnly=false não funciona.
Dexer (D8)
Erro de fusão dex relacionada a sintéticos globais após o upgrade do AS Canary 6 para 7.
A biblioteca de metadados do Kotlin foi atualizada para a versão 0.6.0.
Uma alternativa para o JDK-8272564 parece ser necessária nos níveis 28 a 30 da API.
Lint
A verificação de lint ResourceType não está funcionando para origens Kotlin.
VersionChecks não processa verificações de intervalo do Kotlin.
Falso positivo para IninlineApi quando encapsulado.
Lint falso positivo de reciclagem relacionado ao openInputStream.
[BuildTool/Lint] Propriedade de construtor ChecksSdkIntAtLeast.
Lint: a mesclagem de PartialResults funciona incorretamente.
O Android Studio marca incorretamente a versão especificada como desatualizada.
O uso do EP AndroidInspectionInspection.deprecationFilter nunca é registrado no arquivo android-plugin.xml.
A explicação da verificação de lint do AccessibilityDetector está desatualizada.
As verificações de SDK_INT do lint deveriam entender as variáveis locais temporárias.
Erro quando TestMode.TYPE_ALIAS substitui o tipo de função por typealias.
Bug: quando o ObjectAnimator é criado fora do bloco de código atual, há avisos falsos positivos que ele não foi iniciado #38.
Lint: NPE devido à consulta da instância do aplicativo no modo mergeOnly.
A regra de lint NonConstantResourceId não consegue detectar para atribuir valores constantes do código do recurso.
Erro ao mostrar o ID da visualização.
Falha de desserialização do cache de recursos de lint que resulta em um erro de lint (mas deveria ser um aviso).
Regressão de simplificação de lint para o AGP Flamingo Alfa 8.
A TypedArray#close (API 31) não é simplificada, mas o AS não mostra um aviso quando usado em try-with-resources.
O lint não verifica as transmissões válidas para receptores de chamadas.
O lint verifica somente transmissões seguras para interfaces implementadas diretamente, não as herdadas.
Integração com o Lint
Atualmente, o arquivo de referência é uma entrada e uma saída das tarefas de lint.
Redutor (R8)
NPE / erro de declaração no verificador de frames CF.
Ocorre uma regressão após a remoção do cache de pesquisa de campo.
O ":app:minifyVariantWithR8" gera uma NullPointerException no AGP 7.4.0-beta02.
R8: ClassNotFoundException quando -allowaccessmodification.
Adicionar suporte para receptores de contexto em metadados.
java.lang.VerifyError: o verificador rejeitou a classe androidx.compose.ui.graphics.colorspace.o: void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object) falhou na verificação: void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object): [0x0] não pode acessar o campo de instância java.lang.Object androidx.compose.ui.graphics.colorspace.n.a do objeto do tipo Precise Reference: androidx.compose.ui.graphics.colorspace.o.
AGP 7.4.0/7.3.1: tentativa de enfileirar uma ação em uma lista de trabalhos de enfileiramento que não pode ser enviada.
Minificação do código Renderscript: queda considerável no desempenho ao fazer upgrade do AGP 7.3.1 para 7.4.0.

Plug-in do Android para Gradle 8.0.1

Problemas corrigidos
Redutor (R8)
Erro: "No VersionRequirement with the given id in the table" depois de fazer upgrade do AGP 7.2.2 para 7.4.0
R8 NullPointerException em markTypeAsLive AGP 7.4.1
[R8 4.0.53] Falha de verificação de classe rígida no Android 11

Plug-in do Android para Gradle 8.0.2

Problemas corrigidos
Redutor (R8)
O R8 falha durante o build do Compose com uma ArrayIndexOutOfBoundsException
VerifyError: o verificador rejeitou a classe ao usar o R8 com o Kotlin 1.8.20
O R8 no AGP 8 interrompe o serviço do Google Fit
A inclusão de informações do arquivo de origem com nomes residuais que se sobrepõem aos nomes das entradas não é representada corretamente