Plug-in do Android para Gradle 8.3.0 (fevereiro de 2024)

O Plug-in do Android para Gradle 8.3.0 é uma versão principal que inclui vários novos recursos e melhorias.

Compatibilidade

O nível máximo da API compatível com o plug-in do Android para Gradle 8.3 é o nível 34. Outras informações de compatibilidade:

Versão mínima Versão padrão Observações
Gradle 8.4 8.4 Para saber mais, consulte Como atualizar o Gradle.
Ferramentas de build do SDK 34.0.0 34.0.0 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.

Confira a seguir os novos recursos do Plug-in do Android para Gradle 8.3.

Versões de patch

Esta é uma lista das versões de patch do Android Studio Iguana e do Plug-in do Android para Gradle 8.3.

Android Studio Iguana | 2023.2.1 Patch 2 e AGP 8.3.2 (abril de 2024)

Esta atualização secundária inclui estas correções de bugs.

Android Studio Iguana | 2023.2.1 Patch 1 e AGP 8.3.1 (março de 2024)

Esta atualização secundária inclui estas correções de bugs.

Suporte para catálogos de versões do Gradle

O Android Studio é compatível com os catálogos de versões do Gradle baseados em TOML, um recurso que permite gerenciar dependências em um local central e compartilhar dependências entre módulos ou projetos. Agora, o Android Studio facilita a configuração de catálogos de versões com sugestões do editor e integração com a caixa de diálogo Estrutura do projeto. Saiba como configurar e configurar catálogos de versões do Gradle ou como migrar seu build para catálogos de versões.

Preenchimento e navegação de código

O Android Studio oferece preenchimento de código quando você edita um catálogo de versões no formato de arquivo TOML ou adiciona uma dependência de um catálogo de versões a um arquivo de build. Para usar a conclusão de código, pressione Ctrl+Espaço (Command+Espaço no macOS). Além disso, você pode navegar rapidamente de uma referência de dependência no arquivo build.gradle do app até onde ela é declarada no catálogo de versões pressionando Ctrl+b (Command+b no macOS).

Conclusão de código ao adicionar uma dependência

Integração com a caixa de diálogo "Project Structure"

Se o projeto usar um catálogo de versões definido no formato de arquivo TOML, você poderá editar as variáveis definidas na caixa de diálogo Project Structure na visualização Variables (File > Project Structure > Variables) no Android Studio. Para cada catálogo de versões, há um menu suspenso que lista as variáveis desse catálogo. Para editar uma variável, clique no valor dela e substitua. Quando você salva essas mudanças, o arquivo TOML é atualizado de acordo.

Variáveis de um catálogo de versões na caixa de diálogo "Project Structure"

Você também pode atualizar as dependências na caixa de diálogo Project Structure na visualização Dependencies (File > Project Structure > Dependencies). Para atualizar versões usando a caixa de diálogo Estrutura do projeto, navegue até o módulo e a dependência que você quer editar e atualize o campo Versão solicitada. Quando você salva essas mudanças, o arquivo TOML é atualizado de acordo. Se a versão da dependência foi definida usando uma variável, atualizar a versão diretamente dessa forma vai substituir a variável por um valor codificado. Além disso, remover uma dependência de um arquivo de build, usando ou não a caixa de diálogo Estrutura do projeto, não remove a dependência do catálogo de versões.

Dependências de um catálogo de versões na caixa de diálogo "Project Structure"

Limitações e problemas conhecidos

Confira abaixo os problemas ou limitações conhecidos com o suporte a catálogos de versões do Gradle no Android Studio.

  • O plug-in de destaque de erros em declarações de alias em arquivos de script Kotlin: quando você adiciona uma declaração de plug-in do formulário alias(libs.plugins.example), o editor adiciona um sublinhado vermelho na parte libs. Esse é um problema conhecido nas versões 8.0 e anteriores do Gradle, que será resolvido em uma versão futura.

  • Suporte do Android Studio apenas para catálogos de versões no formato TOML: atualmente, o preenchimento automático de código, a navegação e a caixa de diálogo "Estrutura do projeto" do Android Studio estão disponíveis apenas para catálogos de versões definidos no formato de arquivo TOML. No entanto, ainda é possível adicionar um catálogo de versões diretamente no arquivo settings.gradle e usar as dependências dele no seu projeto.

  • Navegação para arquivos de build KTS não compatível: navegar até uma definição de dependência em um catálogo de versões usando Control+clique (Command+clique no macOS) ainda não é compatível com arquivos de build gravados usando o script Kotlin.

  • O Firebase Assistant adiciona dependências diretamente aos scripts de build: o Firebase Assistant adiciona dependências diretamente aos scripts de build em vez de usar catálogos de versões.

  • A funcionalidade "Encontrar usos" não é compatível: ainda não é possível encontrar usos de uma variável de catálogo de versões em outros arquivos de build, seja em KTS ou Groovy. Ou seja, usar Ctrl+clique (Command+clique no macOS) em uma definição de variável em um catálogo de versões não leva aos arquivos de build em que a variável é usada.

  • A caixa de diálogo "Estrutura do projeto" no Android Studio mostra vários arquivos de catálogo se eles estiverem na pasta raiz gradle, mas não mostra catálogos para um build composto. Por exemplo, se você tiver dois arquivos de catálogo, um para o app e outro para um build composto, a caixa de diálogo "Estrutura do projeto" vai mostrar apenas o arquivo de catálogo do app. É possível usar um build composto, mas é necessário editar o arquivo TOML diretamente.

Outros insights do SDK: problemas de política

O Android Studio mostra avisos de lint em arquivos build.gradle.kts e build.gradle e na caixa de diálogo Project Structure para SDKs públicos que têm violações da política do Google Play no SDK Index do Google Play. Atualize as dependências que violam as políticas do Google Play, porque essas violações podem impedir que você publique no Google Play Console no futuro. Os avisos de violação de política complementam os avisos de versão desatualizada exibidos pelo Android Studio.

Suporte à versão compileSdk do Android Studio

O Android Studio mostra um aviso se o projeto usar um compileSdk que não é compatível com a versão atual do Android Studio. Se disponível, ele também sugere a migração para uma versão do Android Studio que ofereça suporte ao compileSdk usado pelo seu projeto. Lembre-se de que fazer upgrade do Android Studio também pode exigir que você faça upgrade do AGP. O AGP também mostra um aviso na janela de ferramentas Build se o compileSdk usado pelo projeto não for compatível com a versão atual do AGP.

Mudanças de comportamento do lint

A partir do Plug-in do Android para Gradle 8.3.0-alpha02, ao executar o lint em um módulo, tarefas separadas de análise do lint são executadas para os componentes principal e de teste do módulo. O motivo dessa mudança é melhorar a performance. Para reverter ao comportamento anterior, defina android.experimental.lint.analysisPerComponent=false no arquivo gradle.properties.

Redução precisa de recursos ativada por padrão

A redução precisa de recursos, que remove entradas não utilizadas do arquivo resources.arsc e elimina arquivos de recursos não utilizados, fica ativada por padrão. Quando essa redução é ativada, a tabela de recursos é reduzida, e apenas as entradas da pasta res referenciadas são incluídas no APK.

Para desativar a redução precisa de recursos, defina android.enableNewResourceShrinker.preciseShrinking como false no arquivo gradle.properties do projeto.

Problemas corrigidos

Plug-in do Android para Gradle 8.3.0

Problemas corrigidos
Plug-in do Android para Gradle
O cache de build é redundante para a tarefa PackageForUnitTest.
[AGP 8.1.0] O teste ./gradlew falha com a mensagem "Não foi possível encontrar a saída do manifesto" quando splits.abi.isEnable e testOptions.unitTests.isIncludeAndroidResources são verdadeiros.
A criação de modelos do AGP falha com builds compostos aninhados do Gradle.
O redutor de recursos prejudica os IDs, causando falhas no ambiente de execução.
A verificação mínima da versão do Gradle não é executada no segundo build e mais tarde.
Falha na execução da tarefa ":app:mergeReleaseClasses" após atualizar o AGP da versão 8.0.2 para a 8.1.0.
[Gradle 8.4][upgrade] Falha no teste de integração após o upgrade devido ao uso de um recurso descontinuado no plug-in do Gradle para Kotlin.
Não verifica a existência de arquivos de sobreposição de manifesto durante a fase de configuração.
Link corrompido para o documento do Gradle no erro MergeJavaResWorkAction.
O Gradle 8.1 interrompe o armazenamento em cache da configuração devido a .gradle/.android/analytics.settings.
O AGP não pode usar o ProjectComponentIdentifier.projectPath sem o ProjectComponentIdentifier.build.
Reduza/remova a geração de registros no nível de informações do AGP "Outro plug-in do Google Analytics para o proto: … ".
[Gradle 8.4][upgrade] A operação de arquivo durante a configuração no ProcessJavaResTask interrompe o armazenamento em cache da configuração.
API Variant para receber a tabela de símbolos (R.txt)
O plug-in autônomo do lint não gerencia a dependência gradleApi() corretamente.
kDocs ruins em classes/propriedades do AGP. "VariantOutput.enable" sugere que ele precisa ser substituído por "VariantOutput.enable".
O AGP 8.3.0-alpha02 não pode instalar perfis de versão em hosts do Windows.
Aplicar "android.enableDexingArtifactTransform=true"
[Gradle 8.4][upgrade] Falha no teste de integração após o upgrade devido ao processamento de arquivos na fase de configuração.
AGP 8.3.0-alpha-02: "Erro: falha ao desserializar o repositório de recursos em cache".
[Gradle 8.4][upgrade] Falha no teste de integração após o upgrade devido ao processamento de arquivos na fase de configuração do TestLabBuildService.
O AGP 8.1.0 desinstala o app depois de executar testes de instrumentação. A versão 7.4.2 não faz isso.
A transformação de um APK causa um erro com o ListingFileRedirectTask.
A transformação do artefato ASSETS fornece locais de entrada/saída corrompidos.
Mudança de android.experimental.r8.dex-startup-optimization=true para ser o padrão.
Migrar para a nova API de alinhamento de configuração do Gradle.
A compilação de recursos falha quando o compilador Kotlin tenta atualizar para o IDEA 21.3.
get() reativo com API de artefatos.
Upgrade da propriedade AGP "android.lint.printStackTrace" para estável.
AGP 8.1.0: recurso dinâmico: dependência implícita entre exportReleaseConsumerProguardFiles e extractProguardFiles causa erros de compilação.
`variant.unitTest.jniLibs.addGeneratedSourceDirectory` parece não fazer nada.
Atualização do analisador XML usado na compatibilidade do AGP com o Gradle 8.4.
O instrumento jacoco do pacote de versão do AGP 8.0.1 não entra em vigor.
REGRESSÃO DE HEDGEHOG: o botão "Executar" atrasa alguns segundos (criando especificação).
O AGP 8.3.0-alpha11 produz um APK de lançamento que falha na inicialização com android.content.res.Resources$NotFoundException.
Upgrade da propriedade AGP "android.lint.printStackTrace" para estável.
Solicitação de recurso: promover com.android.build.api.extension.impl.CURRENT_AGP_VERSION a uma API pública.
O SDK Manager não pode mais fazer spam de informações de registro para a stdout.
Falha no DexArchiveBuilderTaskDelegate com o módulo de biblioteca somente de recursos.
Variante personalizada do plug-in do AGP7.4 toTransform para todas as entradas duplicadas: exceção META-INF/MANIFEST.MF.
Suporte a novas tags de manifesto,
O link para "projetos dissociados" nas configurações do Studio leva ao lugar errado.
Forneça opções para incluir origens geradas no Javadoc e no SourceJar.
Correção rápida na discrepância entre o compileSdk e a dependência com minCompileSdkVersion.
[Gradle] tools:overrideLibrary precisa ter suporte para asterisco (*).
A interface trava ao editar o manifesto.
Não foi possível definir a versão do JaCoCo no AGP 8.2.0.
A tarefa de instalação do Plug-in do Android para Gradle 8.2.0 falha em projetos que usam recursos dinâmicos.
A tarefa de instalação do Plug-in do Android para Gradle 8.2.0 falha em projetos que usam recursos dinâmicos.
Dexer (D8)
[Biblioteca simplificada] A versão 2.1 da biblioteca simplificada não é compatível com versões anteriores do R8.
Otimizações são executadas mesmo tendo apenas o D8.
Lint
[Lint] O TranslucentViewDetector falha na função filterIncident e faz com que o lint produza um resultado errado.
O TranslucentViewDetector precisa aceitar o valor "atrás".
O Android Lint falha em uma biblioteca KMP com a seguinte mensagem: "A propriedade 'variantInputs.name' não tem um valor configurado".
O TranslucentViewDetector relata uma linha incorreta no manifesto.
O lintDebug informa de maneira falsa os avisos UseTomlInstead ao usar dependências do projeto.
Problemas inesperados de outro projeto são sinalizados pelo Android Lint.
Verificação de LINT: detecção de falsos positivos de recursos não usados dentro da vinculação e do listener de clique.
Não foi possível carregar o arquivo jar de verificação de lint personalizado: o nó não pode ser transmitido para o TreeNode.
O lint visitAnnotationUsage não é chamado para usos de classes com anotações em declarações de variáveis.
O lint 31.0.2 falha com java.util.NoSuchElementException: a matriz está vazia.
Nenhum aviso de lint sobre kotlin.text.MatchNamedGroupCollection#get(String) exigindo o nível 26 da API.
lint:TypographyQuotes: falsos negativos: mais de um apóstrofo com escape é ignorado.
Falso positivo de lint do detector InvalidId do AGP 8.0.2
Foram adicionados problemas de LintError aos valores de referência de lint.
O Quickfix Lint não funciona e resulta em um erro do ambiente de desenvolvimento integrado.
Falha no teste inconsistente devido à análise parcial.
Destaque inválido de um alerta falso positivo.
O lint visitAnnotationUsage não é chamado para usos de classes com anotações em declarações de variáveis.
O processador de recursos não usado pode excluir o arquivo de build do Gradle.
A verificação de lint da NewApi não reconhece o campo final "isAtleastU() && otherCondition()".
StackOverflow de "LintClient.getSdkHome".
O Android Studio / Lint não informa quando as dependências da "plataforma" estão desatualizadas.
Bug: nenhuma sugestão para atualizar a dependência Firebase-bom.
O Project Structure e o Gradle não descobrem as dependências da BoM do Firebase a serem atualizadas para uma versão mais recente.
Integração com o Lint
Erro de lint de DuplicatePlatformClasses da dependência testImplementation.
Redutor (R8)
O R8 não funciona após o upgrade do AGP 8.0.2 para o 8.1.0.
O isShrinkResources tem otimização excessiva em 8.3.0-alpha11 para alpha14.
Falha no SDK do Flurry do R8 com o AGP 8.2.0.
Android: o R8 faz com que a subclasse de LinearLayoutManager falhe.
O R8 v8.2.33 falha no ambiente de execução "java.lang.VerifyError: Bad type on operand stack" após o upgrade.
[R8 8.3.21] O R8 8.3.21 tem 1,57 MB a mais que o R8 8.1.56.
[R8 8.3.21] O R8 8.3.21 tem 1,57 MB a mais que o R8 8.1.56.
O class.getInterfaces() retorna vazio.
O teste SimpleKotlinEnumUnboxingTest falha no bot kotlin_dev.

Plug-in do Android para Gradle 8.3.1

Problemas corrigidos
Plug-in do Android para Gradle
Problema no processamento de entradas incrementais da tarefa MergeJavaResourcesTask.
Integração com o Lint
O lint não consegue resolver os tipos de conjuntos de origem irmãos no AGP 8.3.0-rc02.

Plug-in do Android para Gradle 8.3.2

Problemas corrigidos
Plug-in do Android para Gradle
Um impasse pode ocorrer no AGP 8.3 com a simplificação de leitura ativada
O AGP 8.3 interrompe a tarefa zipApksFor.
Integração com o Lint
O Lint não consegue desambiguar uma dependência do KMP