Notas da versão da prévia do Plug-in do Android para Gradle

Esta página contém as notas da versão para prévias do Plug-in do Android para Gradle (AGP, na sigla em inglês).

Plug-in do Android para Gradle 9.0

O Plug-in do Android para Gradle 9.0 é uma nova versão principal da AGP que traz mudanças de API e comportamento.

Para atualizar para o Plug-in do Android para Gradle 9.0.0-alpha04, use o Assistente de upgrade do Plug-in do Android para Gradle no Android Studio Narwhal 4 Feature Drop | 2025.1.4.

O assistente de upgrade do AGP ajuda a preservar os comportamentos atuais ao fazer upgrade do projeto quando apropriado. Assim, é possível fazer upgrade do projeto para usar o AGP 9.0, mesmo que você não esteja pronto para adotar todos os novos padrões do AGP 9.0.

Compatibilidade

O nível máximo da API Android compatível com o Plug-in do Android para Gradle 9.0.0-alpha04 é o nível 36.

O plug-in do Android para Gradle 9.0.0-alpha04 exige o Gradle 9.0.0.

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

As implementações internas de DSL e a API de variantes descontinuada agora exigem ativação explícita

O Plug-in do Android para Gradle agora tem uma superfície de API definida, com APIs compatíveis definidas no artefato do Maven com.android.tools.build:gradle-api.

Para compatibilidade com plug-ins binários e scripts de build atuais, as implementações anteriores da DSL que antecedem a superfície da API definida ainda eram expostas por padrão no AGP 8.13 e versões anteriores. Isso permite que o código em plug-ins do Gradle e scripts de build acesse detalhes de implementação interna da DSL, bem como as APIs android.applicationVariants, android.libraryVariants, android.testVariants e android.unitTestVariants descontinuadas, que serão removidas em 2026 no AGP 10.

Para tornar essa transição mais visível, a API de variante legada e a DSL interna não estão acessíveis por padrão no Plug-in do Android para Gradle 9.0.0-alpha04.

É possível ativar novamente o uso da API descontinuada definindo android.newDsl=false em gradle.properties.

Durante a série alfa 9.0, vamos entrar em contato com os autores de plug-ins para ajudar na adaptação e no lançamento de plug-ins totalmente compatíveis com os novos modos. Além disso, vamos aprimorar o Assistente de upgrade do AGP no Android Studio para orientar você durante a migração.

Kotlin integrado

O Plug-in do Android para Gradle 9 inclui suporte integrado para compilar Kotlin, substituindo o plug-in do Kotlin aplicado separadamente. Isso simplifica a integração com o AGP, evitando o uso das APIs descontinuadas e melhorando o desempenho em alguns casos.

O Plug-in do Android para Gradle 9 tem uma dependência de tempo de execução do plug-in Kotlin para Gradle 2.2.0, que é a versão mínima necessária para a compatibilidade integrada com Kotlin.

É possível desativar o Kotlin integrado definindo android.builtInKotlin=false. Se você desativou a opção e também precisa usar uma versão mais antiga do plug-in do Gradle do Kotlin, force o downgrade.

buildscript {
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
            version { strictly("2.0.0") } // or another version that you want to use
        }
    }
}

Mudanças de comportamento

O Plug-in do Android para Gradle 9.0 tem os seguintes novos comportamentos:

Comportamento Recomendação
O Plug-in do Android para Gradle 9.0 usa a versão r28c do NDK por padrão. Considere especificar explicitamente a versão do NDK que você quer usar.
Por padrão, o Plug-in do Android para Gradle 9.0 exige que os consumidores de uma biblioteca usem a mesma versão ou uma versão mais recente do SDK de compilação. Use o mesmo SDK de compilação ou uma versão mais recente ao consumir uma biblioteca. Se isso não for possível ou se você quiser dar mais tempo para os consumidores de uma biblioteca que você publica fazerem a troca, defina AarMetadata.minCompileSdk explicitamente.

A AGP 9.0 inclui atualizações nos padrões das seguintes propriedades do Gradle. Assim, você pode preservar o comportamento do AGP 8.13 ao fazer upgrade:

Propriedade Função Mudança do AGP 8.13 para o AGP 9.0 Recomendação
android.newDsl Use as novas interfaces DSL sem expor as implementações legadas do bloco android.
Isso também significa que a API Variant legada, como android.applicationVariants não está mais acessível.
falsetrue Para desativar, defina android.newDsl=false.
Quando todos os plug-ins e a lógica de build usados no projeto forem compatíveis, remova a recusa.
android.builtInKotlin Ativamos o suporte para compilar código Kotlin diretamente no plug-in do Android Gradle, sem o plug-in org.jetbrains.kotlin.android. falsetrue Adote o Kotlin integrado removendo o uso do plug-in org.jetbrains.kotlin.android, se possível. Caso contrário, desative a opção definindo android.builtInKotlin=false.
android.uniquePackageNames Garante que cada biblioteca tenha um nome de pacote diferente. falsetrue Especifique nomes de pacotes exclusivos para todas as bibliotecas no projeto. Se isso não for possível, desative a flag durante a migração.
android.dependency.useConstraints Controla o uso de restrições de dependência entre configurações.
O padrão no AGP 9.0 é false, que usa apenas restrições em testes de dispositivos de aplicativos (AndroidTest). Definir como true vai reverter para o comportamento da versão 8.13.
truefalse Não use restrições de dependência em todos os lugares, a menos que seja necessário. Aceitar o novo padrão dessa flag também ativa otimizações no processo de importação de projetos, o que reduz o tempo de importação para builds com muitos subprojetos de biblioteca Android.
aandroid.enableAppCompileTimeRClass Compile o código em aplicativos com uma classe R não final, alinhando a compilação do aplicativo com a da biblioteca.
Isso melhora a incrementalidade e abre caminho para futuras otimizações de performance no fluxo de processamento de recursos.
falsetrue Muitos projetos podem adotar o novo comportamento sem mudanças na origem. Se os campos da classe R forem usados em qualquer lugar que exija uma constante, como casos de troca, refatore para usar instruções if encadeadas.
android.sdk.defaultTargetSdkToCompileSdkIfUnset Usa a versão do SDK de compilação como o valor padrão para a versão do SDK de destino em apps e testes.
Antes dessa mudança, a versão do SDK de destino era definida como padrão para a versão mínima do SDK.
falsetrue Especifique explicitamente a versão do SDK de destino para apps e testes.
android.onlyEnableUnitTestForTheTestedBuildType Cria apenas componentes de teste de unidade para o tipo de build testado.
No projeto padrão, isso resulta em um único teste de unidade para depuração, enquanto o comportamento anterior era executar testes de unidade para depuração ou lançamento.
falsetrue Se o projeto não exigir que os testes sejam executados para depuração e lançamento, não é necessário fazer mudanças.
android.proguard.failOnMissingFiles Falha no build com um erro se algum dos arquivos de manutenção especificados na DSL do AGP não existir no disco. Antes dessa mudança, erros de digitação em nomes de arquivos faziam com que os arquivos fossem ignorados silenciosamente. falsetrue Remover declarações inválidas de arquivos ProGuard
android.r8.optimizedResourceShrinking Permite que o R8 mantenha menos recursos do Android considerando classes e recursos do Android juntos. falsetrue Se as regras de retenção do projeto já estiverem completas, não será necessário fazer mudanças.
android.r8.strictFullModeForKeepRules Permite que o R8 mantenha menos ao não manter implicitamente o construtor padrão quando uma classe é mantida. Ou seja, -keep class A não implica mais -keep class A { <init>(); }
falsetrue Se as regras de retenção do projeto já estiverem completas, não será necessário fazer mudanças.

Substitua -keep class A por -keep class A { <init>(); } nas regras de manutenção do projeto em todos os casos em que você precisa que o construtor padrão seja mantido.
android.defaults.buildfeatures.shaders Ativa a compilação de shader em todos os subprojetos. truefalse Ative a compilação de sombreadores apenas nos subprojetos que contêm sombreadores a serem compilados definindo o seguinte nos arquivos de build do Gradle desses projetos:
android {
  buildFeatures {
    shaders = true
  }
}

Recursos removidos

O Plug-in do Android para Gradle 9.0 remove as seguintes funcionalidades:

DSL alterada

O Plug-in do Android para Gradle 9.0 tem as seguintes mudanças interruptivas na DSL:

  • A parametrização de CommonExtension foi removida.

    Por si só, essa é apenas uma mudança incompatível no nível da origem para ajudar a evitar futuras mudanças incompatíveis no nível da origem, mas também significa que os métodos de bloco precisam ser movidos de CommonExtension para ApplicationExtension, LibraryExension, DynamicFeatureExtension e TestExtension.

    Ao fazer upgrade do projeto para o AGP 9.0, refatore o código do plug-in do Gradle que usa esses parâmetros ou os métodos de bloqueio. Por exemplo, o plug-in a seguir é atualizado para remover o parâmetro de tipo e não depender dos métodos de bloco removidos:

    AGP 8.13

    val commonExtension: CommonExtension<*, *, *, *, *, *> =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig {
            minSdk {
                version = release(28)
            }
        }
    }
    

    AGP 9.0

    val commonExtension: CommonExtension =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig.apply {
            minSdk {
                version = release(28)
            }
        }
    }
    

    Para plug-ins que têm como destino um intervalo de versões do AGP, usar o getter diretamente é compatível com versões do AGP anteriores à 9.0.

DSL removida

O Plug-in do Android para Gradle 9.0 remove:

Propriedades do Gradle removidas

As seguintes propriedades do Gradle foram adicionadas inicialmente como formas de desativar globalmente recursos que estavam ativados por padrão.

Esses recursos foram desativados por padrão desde o AGP 8.0 ou versões anteriores. Ative esses recursos apenas nos subprojetos que os usam para uma build mais eficiente.

Propriedade Função Substituição
android.defaults.buildfeatures.aidl Ativa a compilação AIDL em todos os subprojetos. Ative a compilação do AIDL apenas nos subprojetos em que há fontes AIDL definindo a seguinte propriedade nos arquivos de build do Gradle desses projetos:
android {
  buildFeatures {
    aidl = true
  }
}
no arquivo de build do Gradle de cada subprojeto que contém fontes AIDL
android.defaults.buildfeatures.renderscript Ativa a compilação do RenderScript em todos os subprojetos. Ative a compilação do RenderScript apenas nos subprojetos em que há fontes do RenderScript definindo a seguinte propriedade nos arquivos de build do Gradle desses projetos:
android {
  buildFeatures {
    renderScript = true
  }
}

APIs removidas

O Plug-in do Android para Gradle 9.0 remove:

  • As APIs BaseExtension.registerTransform descontinuadas e desativadas, que permaneceram apenas para permitir a compilação com a versão mais recente do AGP enquanto o destino era a execução no AGP 4.2 ou versões anteriores.

Propriedades do Gradle aplicadas

O AGP 9.0 gera um erro se você definir as seguintes propriedades do Gradle.

O Assistente de upgrade do Plug-in do Android para Gradle não vai fazer upgrade de projetos para o AGP 9.0 que usam essas propriedades.

Propriedade Função
android.r8.integratedResourceShrinking A redução de recursos agora é sempre executada como parte do R8. A implementação anterior foi removida.