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 várias novas 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

Esta é 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 a 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

Alteração interruptiva: namespace obrigatório no script de build do módulo

É necessário definir o namespace no arquivo build.gradle.kts do módulo, em vez do arquivo de manifesto. É possível começar a usar a propriedade DSL namespace a partir da 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. ID do aplicativo, incorreto 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 de mudar o namespace do teste, é possível que o código seja compilado. mas os testes instrumentados falham no momento da execução. Isso pode acontecer se o código-fonte de um teste instrumentado referencia um recurso definido nas androidTest e origens de apps.

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

Alterações interruptivas: valores padrão da opção de build

A partir do AGP 8.0, os valores padrão dessas flags foram alterados para a melhorar o desempenho do build. Para obter ajuda para ajustar seu código para oferecer suporte a alguns dos essas mudanças, use o Assistente de upgrade do AGP (Tools > AGP Upgrade Assistant). O Assistente de upgrade vai orientar você atualizando o código para acomodar o novo comportamento ou definindo sinalizações 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 sinalização é 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. Você precisa especificar essa opção usando a DSL nos projetos em que ela for necessária. Isso flag será removida no AGP 9.0.
android.nonFinalResIds true false O AGP 8.0 gera classes R com campos não finais ao 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 mais detalhes, consulte Modo R8 completo.

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ê especificar no arquivo gradle.properties, o valor será ignorado, e o AGP mostra avisos.

Sinalização Valor aplicado 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 em builds que usam o R8 se houver classes ausentes para e garantir uma melhor otimização do DEX. Para resolver isso, adicione as bibliotecas ausentes ou as regras de manutenção -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 do 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 a API Gradle cache de build.
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 projetos 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 calcular mapeamentos de caminho de recurso relativo. O Gradle cria são atualizados com mais frequência.
android.cacheCompileLibResources true Os recursos da biblioteca compilada agora podem ser armazenados em cache por padrão porque o Gradle rastreia arquivos de recursos em relação ao local do projeto. Requer android.enableSourceSetPathsMap ativado.
android.disableAutomaticComponentCreation true O AGP 8.0 não cria 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 perfil de execução

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

Para visualizar as sinalizações experimentais, consulte a 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, observe que o Android Studio e o AGP 8.0 não oferecem suporte à atribuição experimental de propriedades 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

No 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 as tarefas individualmente, o Build Analyzer as agrupa por categoria. Por exemplo, tarefas específicas para recursos do Android, Kotlin ou Dexing. são agrupados e classificados por duração. Isso facilita saber qual categoria tem mais impacto no tempo de compilação. Expanda cada categoria exibe uma lista das tarefas correspondentes. Para mostrar as tarefas individualmente, sem agrupar, use o menu suspenso Agrupar por.

Criar categorias de tarefas do Analyzer.

Novo plug-in de configurações

O AGP 8.0.0-alpha09 apresenta o novo plug-in de configurações. Com o plug-in de configurações, você centraliza configurações globais, ou seja, configurações que se aplicam a todos os módulos, em para não precisar copiar e colar as configurações em vários módulos. Além disso, é possível usar o plug-in de configurações para criar perfis de execução de ferramentas ou diferentes instruções 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 definir configurações globais, use o novo bloco android na classe 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 o perfil de execução determina como uma ferramenta é executada; é possível selecionar diferentes de execução compatíveis com o ambiente. Em um perfil de execução, é possível definir argumentos da JVM para uma ferramenta e configurá-la para ser executada 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 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 um perfil diferente usando a propriedade android.experimental.settings.executionProfile no arquivo gradle.properties:

android.experimental.settings.executionProfile=high

Você também pode definir essa propriedade usando a linha de comando, que permite configurar fluxos de trabalho diferentes. Por exemplo, se você tem um fluxo de trabalho de integração contínua é possível usar a linha de comando para alterar o perfil de execução sem precisar mude 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 por padrão, o que significa que a maioria dos usuários do Android Studio não precisa fazer todas as mudanças de configuração nos projetos.

Se você precisar definir manualmente a versão do JDK, usado pelo AGP no Android Studio, é necessário usar o JDK 17 ou mais recente.

Ao usar o AGP independente do Android Studio, faça upgrade da versão do JDK. a definição de JAVA_HOME variável de ambiente ou o -Dorg.gradle.java.home opção de linha de comando no 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