Plug-in do Android para Gradle 8.1.0 (julho de 2023)

O Plug-in do Android para Gradle 8.1.0 é uma versão principal que inclui vários 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 33.0.1 33.0.1 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.

A DSL do Kotlin é o padrão para a configuração do build

Os novos projetos agora usam a DSL do Kotlin (build.gradle.kts) por padrão para a configuração do build. Isso oferece uma experiência de edição melhor do que a DSL do Groovy (build.gradle) com destaque de sintaxe, preenchimento de código e navegação para declarações. Se você estiver usando o AGP 8.1 e a DSL do Kotlin para a configuração do build, use o Gradle 8.1 para ter a melhor experiência. Para saber mais, consulte o guia de migração da DSL do Kotlin.

Suporte automático ao idioma por app

No Android Studio Giraffe Canary 7 e no AGP 8.1.0-alpha07, é possível configurar o app para oferecer suporte à seleção de idioma por app automaticamente. Com base nos recursos do projeto, o Plug-in do Android para Gradle gera o arquivo LocaleConfig e adiciona uma referência a ele no arquivo de manifesto final. Assim, não é mais necessário fazer isso manualmente. O AGP usa os recursos nas pastas res dos módulos do app e qualquer dependência de módulos de biblioteca para determinar as localidades que serão incluídas no arquivo LocaleConfig.

O recurso automático de idioma por app tem suporte de apps com o Android 13 (nível 33 da API) ou mais recente. Para usar o recurso, defina compileSdkVersion como 33 ou maior. Para configurar a seleção de idioma por app em versões anteriores do Android, ainda é necessário usar as APIs e os seletores de idioma no app.

Para ativar o suporte automático ao idioma por app, especifique uma localidade padrão:

  1. Na pasta res do módulo do app, crie um novo arquivo chamado resources.properties.
  2. No arquivo resources.properties, defina a localidade padrão com o rótulo unqualifiedResLocale. Para formar os nomes de localidade, combine o código do idioma com o script opcional e os códigos de região, separando cada um com um traço:

    Por exemplo, se a localidade padrão for inglês dos EUA:

        unqualifiedResLocale=en-US
        

O AGP adiciona a localidade padrão e qualquer outra localidade alternativa que você tenha especificado (usando diretórios values-* na pasta res) ao arquivo LocaleConfig gerado automaticamente.

O suporte automático ao idioma por app fica desativado por padrão. Para ativar o recurso, use a configuração generateLocaleConfig no bloco androidResources {} do arquivo build.gradle.kts do módulo (arquivo build.gradle, se você estiver usando o Groovy):

Kotlin

android {
  androidResources {
    generateLocaleConfig = true
  }
}

Groovy

android {
  androidResources {
    generateLocaleConfig true
  }
}

O Android Lint contém bytecode voltado para a JVM 17

A partir do AGP 8.1.0-alpha04, o Android Lint contém bytecode voltado para a JVM 17. Se você escrever verificações de lint personalizadas, precisará compilar com o JDK 17 ou mais recente e especificar jvmTarget = '17' nas opções do compilador do Kotlin.

Para saber mais sobre a ferramenta lint, consulte Melhorar seu código com verificações de lint.

A configuração de compactação de biblioteca nativa foi movida para a DSL.

A partir do AGP 8.1.0-alpha10, você vai receber um aviso se não configurar a compactação da biblioteca nativa usando o DSL em vez do manifesto. As orientações a seguir explicam como atualizar a configuração para usar o DSL. Para receber ajuda com essas atualizações, use o Assistente de upgrade do AGP (Tools > AGP Upgrade Assistant).

Para usar bibliotecas nativas não compactadas, remova o atributo android::extractNativeLibs do manifesto e adicione o seguinte código ao arquivo build.gradle.kts do módulo (arquivo build.gradle, se você estiver usando o Groovy):

Kotlin

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging = false
    }
  }
}

Groovy

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

Flags de build experimentais

Estas são flags experimentais para configurar seu build disponível no AGP 8.1.

Sinalização Adicionado em Valor padrão Observações
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false Ativar essa opção sem especificar configurações de assinatura faz com que o AGP use a configuração de assinatura de depuração padrão ao executar um build com perfil ou depurável. Essa flag fica desativada por padrão para incentivar os autores de build a declarar configurações de assinatura de perfil específicas.
android.experimental.library.desugarAndroidTest AGP 8.0 false Essa flag permite que os builders de biblioteca ativem a simplificação da biblioteca principal para testar APKs sem afetar o AAR produzido, por exemplo, com a linting. Planejamos oferecer suporte a esse comportamento na API Variant.
android.experimental.testOptions.managedDevices.customDevice AGP 8.0 false Se ativado, os dispositivos gerenciados pelo Gradle permitem um tipo de dispositivo personalizado definido pelo usuário que pode ser fornecido por um plug-in. Essa flag precisa estar ativada se você quiser usar o plug-in do Firebase Test Lab.
android.lint.printStackTrace AGP 8.0 false Se ativado, o Android Lint vai mostrar um stacktrace em caso de falha. Essa flag tem os mesmos recursos da variável de ambiente LINT_PRINT_STACKTRACE.
android.experimental.testOptions.managedDevices.maxConcurrentDevices AGP 8.0 Nenhum Especifica o número máximo de dispositivos gerenciados pelo Gradle (AVDs) simultâneos que podem ser ativados a qualquer momento. Se o valor for 0 ou negativo, não haverá um número máximo de dispositivos.
android.experimental.testOptions.installApkTimeout AGP 8.0 Nenhum A duração do tempo limite em segundos para instalar um APK. Se o valor for 0 ou negativo, ele será definido como um valor padrão pelo UTP.

Problemas corrigidos

Plug-in do Android para Gradle 8.1.0

Problemas corrigidos
Plug-in do Android para Gradle
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.
[Android Studio: Flamingo | 2022.2.1 Canary 8] O liblog.so é empacotado dentro do APK.
O KGP lê o manifesto durante a configuração, invalidando o cache de configuração na mudança do manifesto.
A mensagem de aviso do build não é clara quando há um problema no manifesto integrado.
O upgrade para o AGP 7.4 resulta em um StackOverflowError.
ClassNotFoundException no recurso dinâmico que depende diretamente do subprojeto da biblioteca Kotlin.
O processDebugUnitTestManifest falha com marcadores de posição de manifesto para variantes de teste.
O processDebugUnitTestManifest falha com marcadores de posição de manifesto para variantes de teste.
Propriedade do namespace provavelmente pertence a HasAndroidResources.
Não é possível desativar a mensagem "Gradle files have changed since last project sync" (Arquivos do Gradle foram modificados desde a última sincronização do projeto).
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
O processDebugUnitTestManifest falha com marcadores de posição de manifesto para variantes de teste.
Flag booleana para desativar a verificação do SDK de compilação em CheckAarMetadataTask.
O erro de build referencia o nível 34 da API, que não existe.
A configuração do conjunto de ferramentas da JVM não afeta o valor de targetCompile do JavaCompile.
As entradas de navegação deepLink com domínios de caractere curinga não têm um atributo android:host no manifesto integrado.
A tarefa processDebugMainManifest falha no Plug-in do Android para Gradle 8.1 e versões mais recentes.
Podemos remover a tarefa AnalyticsRecordingTask?
O conteúdo de output-metadata.json não é consistente.
Podemos remover a tarefa AnalyticsRecordingTask?
O conteúdo de output-metadata.json não é consistente.
A configuração do conjunto de ferramentas da JVM não afeta o valor de targetCompile do JavaCompile.
As entradas de navegação deepLink com domínios de caractere curinga não têm um atributo android:host no manifesto integrado.
A tarefa processDebugMainManifest falha no Plug-in do Android para Gradle 8.1 e versões mais recentes.
O Android Studio não respeita a variável de ambiente STUDIO_GRADLE_JDK.
Tipos de origem personalizados precisam criar conjuntos de origem com diversas variações.
O DependenciesInfoBuilder precisa de uma atualização de API e um documento.
O DexingNoClasspathTransform (minSdk >= 24) com o destino Java 11 falha devido à ausência de membros aninhados.
O DslExtension.Builder.extendProjectWith() não funciona conforme descrito no Groovy.
Foi adicionada a nova API VariantSelector.withFlavor que não usa o kotlin.Pair.
AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) tem uma ausência no cache porque o arquivo "proguard.txt" foi modificado.
O manifesto integrado do app contém os atributos extractNativeLibs e useEmbeddedDex das dependências.
AGP: exposição do caminho para a ferramenta AIDL e o arquivo AIDL do framework como API pública.
Pedido: permita que o ambiente de desenvolvimento integrado ofereça uma correção para "PermittedSubclasses requires ASM9"
Bug: a opção "Enable KSP and use the KSP processor for this dependency instead" (Ativar KSP e usar o processador do KSP para essa dependência) leva a um site
O Gradle 8.1 interrompe o armazenamento em cache da configuração devido a .gradle/.android/analytics.settings
generateLocaleConfig no agp 8.1.0 usa ordenação não determinística, interrompendo builds reproduzíveis
Dexer (D8)
A simplificação da biblioteca principal faz o app falhar após atualizações recentes.
Regressão ao agp 8.1.0 com API 21 - F/dex2oat ( 4176): art/compiler/driver/compiler_driver.cc:1181] Falha na verificação: !method->IsAbstract()
Lint
O lint verifica somente transmissões seguras para interfaces implementadas diretamente, não as herdadas.
O lint não verifica as transmissões válidas para receptores de chamadas.
A TypedArray#close (API 31) não é simplificada, mas o AS não mostra um aviso quando usado em try-with-resources.
Bug: aviso falso positivo de "The 'BC' provider is deprecated and as of Android P…" (o provedor 'BC' foi descontinuado e, a partir do Android P…).
Falso positivo de lint sobre chamadas remember após o upgrade do Kotlin para 1.8.0.
Aviso falso positivo de lint para verificações do SDK_INT realizadas em um método com um parâmetro de enumeração.
A verificação de lint de TypographyQuotes não funciona entre aspas de escape.
A verificação de lint TrustAllX509TrustManager sinaliza interfaces que estendem X509TrustManager incorretamente.
Reformatar apenas o código inserido de uma correção de substituição.
Lint: a visualização de intenção gera uma exceção para ReplaceStringQuickFix.
Redutor (R8)
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
O R8 falha durante o build do Compose com uma ArrayIndexOutOfBoundsException
O código simples relacionado ao StringBuilder perde a chamada de cauda para anexar na versão ou no modo debuggable=false
Um caso específico no método VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds()
Resultados de dex-startup-optimization em java.lang.VerifyError: rejeição de classes
Falha com erro de verificação no Android 12 ou versões mais recentes

Plug-in do Android para Gradle 8.1.1

Problemas corrigidos
Dexer (D8)
Registros do Java 16: equals(null) gera uma NullPointerException.
Redutor (R8)
java.lang.VerifyError: classe do verificador recusada.
O build trava em :minifyReleaseWithR8 ao usar a biblioteca Apache POI.
A invocação é rejeitada quando a otimização do R8 é ativada.
NoClassDefFoundError para java.lang.reflect.Executable

Plug-in do Android para Gradle 8.1.2

Problemas corrigidos
Plug-in do Android para Gradle
O androidResources não está disponível no módulo da biblioteca Android.
[AGP 8.1.0] O teste ./gradlew falha com a mensagem "Unable to find manifest output" (Não foi possível encontrar a saída do manifesto) quando splits.abi.isEnable e testOptions.unitTests.isIncludeAndroidResources são verdadeiros.
Redutor (R8)
O Kotlin 1.9 faz com que as lambdas do Kotlin sejam destruídas pelo R8 se as verificações de valores nulos forem removidas.
O R8 falha com "Valor indefinido encontrado durante a compilação" para play-services-measurement-21.3.0-runtime.jar.

Plug-in do Android para Gradle 8.1.3

Problemas corrigidos
Plug-in do Android para Gradle
[AGP 8.1.0] O teste ./gradlew falha com a mensagem "Unable to find manifest output" (Não foi possível encontrar a saída do manifesto) quando splits.abi.isEnable e testOptions.unitTests.isIncludeAndroidResources são verdadeiros.
Falha na criação após a atualização para o AGP 8.1

Plug-in do Android para Gradle 8.1.4

Problemas corrigidos
Plug-in do Android para Gradle
Não executar a tarefa de dexação nas classes de subprojetos quando elas já tiverem sido dexados pelas transformações de artefato.