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 com suporte ao Plug-in do Android para Gradle 8.3 é o 34. Confira 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 oferece suporte a 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. O Android Studio agora facilita a configuração de catálogos de versões com sugestões do editor e integração com a caixa de diálogo Project Structure. 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ê está editando um catálogo de versões no formato de arquivo TOML ou adicionando 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 (Comando + Espaço no macOS). Além disso, é possível navegar rapidamente de uma referência de dependência no arquivo build.gradle do app para 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, será possível editar as variáveis definidas nele na caixa de diálogo Project Structure 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.

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

Também é possível 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 Project Structure, navegue até o módulo e a dependência que você quer editar e atualize o campo Requested Version. Quando você salva essas mudanças, o arquivo TOML é atualizado. Se a versão de dependência foi definida usando uma variável, atualizar a versão diretamente dessa forma substitui a variável por um valor codificado. Além disso, remover uma dependência de um arquivo de build, seja usando a caixa de diálogo Project Structure ou não, não remove a dependência do catálogo de versões.

Dependencias de um catálogo de versões na caixa de diálogo Project Structure

Problemas e limitações conhecidos

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

  • Erro ao destacar declarações de alias de plug-in 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 do Gradle 8.0 e anteriores e será resolvido em uma versão futura do Gradle.

  • O Android Studio oferece suporte apenas a catálogos de versões no formato TOML: atualmente, o suporte do Android Studio para a conclusão de código, navegação e caixa de diálogo do Project Structure está disponível 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 projeto.

  • Navegação para arquivos de build do KTS sem suporte: a navegação para uma definição de dependência em um catálogo de versões usando Control+clique (Command+clique no macOS) ainda não tem suporte para arquivos de build criados usando o script Kotlin.

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

  • A funcionalidade "Encontrar usos" não tem suporte: ainda não é possível encontrar usos de uma variável de catálogo de versões em outros arquivos de build, seja no KTS ou no 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 "Project Structure" 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 "Project Structure" vai mostrar apenas o arquivo de catálogo do app. Você pode usar um build composto, mas precisa editar o arquivo TOML diretamente.

Outros insights do SDK: problemas com a 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 todas 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 do compileSdk do Android Studio

O Android Studio mostra um aviso se o projeto usa uma compileSdk que não tem suporte da versão atual do Android Studio. Se disponível, ele também sugere a mudança para uma versão do Android Studio que ofereça suporte ao compileSdk usado pelo projeto. Lembre-se de que fazer upgrade do Android Studio também pode exigir que você atualize o AGP. O AGP também mostra um aviso na janela de ferramentas Build se o compileSdk usado pelo projeto não tiver suporte à versão atual do AGP.

Mudanças no 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 de análise de lint separadas são executadas para os componentes principal e de teste do módulo. A razão dessa mudança é melhorar a performance. Para reverter para o comportamento anterior, defina android.experimental.lint.analysisPerComponent=false no arquivo gradle.properties.

A 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, está ativada por padrão. Quando esse encolhimento é ativado, a tabela de recursos é reduzida e apenas as entradas de 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 de processamento de entradas incrementais em 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
O impasse pode acontecer 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 resolver a ambiguidade de uma dependência do KMP.