Plug-in do Android para Gradle 3.3.0 (janeiro de 2019)

Esta versão do plug-in do Android requer o seguinte:

3.3.3 (julho de 2020)

Esta atualização secundária oferece suporte a novas configurações e recursos padrão para visibilidade do pacote no Android 11.

Consulte as notas da versão 4.0.1 para ver mais detalhes.

3.3.2 (março de 2019)

Essa atualização pequena tem suporte ao Android Studio 3.3.2 e inclui várias correções de bugs e melhorias no desempenho. Para ver uma lista de correções de bugs em destaque, leia a postagem correspondente no blog de atualizações de versão (em inglês).

3.3.1 (fevereiro de 2019)

Esta atualização pequena é compatível com o Android Studio 3.3.1 e inclui várias correções de bugs e melhorias no desempenho.

Novos recursos

  • Melhoria na sincronização de caminho de classe: ao resolver dependências nos seus caminhos de classe de execução e de compilação, o Plug-in do Android para Gradle tenta corrigir alguns conflitos de versão para dependências em vários caminhos de classe.

    Por exemplo, se o caminho de classe de execução incluir a Biblioteca A versão 2.0 e o de compilação incluir a Biblioteca A versão 1.0, o plug-in vai atualizar automaticamente a dependência do caminho de classe de compilação para a Biblioteca A 2.0 para evitar erros.

    No entanto, se o caminho de classe de execução incluir a Biblioteca A versão 1.0 e o de compilação incluir a Biblioteca A versão 2.0, o plug-in não vai fazer downgrade da dependência do caminho de classe de compilação para a Biblioteca A versão 1.0 e isso gera um erro. Para saber mais, consulte Corrigir conflitos entre caminhos de classe.

  • Melhoria na compilação Java incremental ao usar processadores de anotações: esta atualização diminui o tempo de build porque melhora o suporte à compilação Java incremental quando usada com processadores de anotações.

    Observação: esse recurso oferece suporte ao Gradle 4.10.1 e versões mais recentes, exceto ao Gradle 5.1 devido ao problema 8194 do Gradle (em inglês).

    • Para projetos que usam o Kapt (a maioria dos projetos somente em Kotlin e dos projetos híbridos em Kotlin-Java): a compilação incremental em Java é ativada, mesmo quando você usa a vinculação de dados ou o plug-in retro-lambda. O processamento de anotações pela tarefa do Kapt ainda não é incremental.

    • Para projetos que não usam o Kapt (projetos somente em Java): se os processadores de anotações que você usa oferecerem suporte ao processamento incremental de anotações (em inglês), a compilação Java incremental vai ser ativada por padrão. Para monitorar a adoção do processador de anotações incremental, consulte o problema 5277 do Gradle (em inglês).

      Entretanto, se um ou mais processadores de anotações não oferecerem suporte a builds incrementais, a compilação incremental em Java não vai ser ativada. Em vez disso, você pode incluir a seguinte flag no seu arquivo gradle.properties:

      android.enableSeparateAnnotationProcessing=true
                  

      Ao incluir essa flag, o Plug-in do Android para Gradle executa os processadores de anotações em uma tarefa separada e permite que as tarefas de compilação em Java sejam executadas de forma incremental.

  • Informações de depuração melhores ao usar uma API obsoleta: quando o plug-in detecta que você está usando uma API que não tem mais suporte, agora ele pode fornecer informações mais detalhadas para determinar onde essa API está sendo usada. Para outras informações, você precisa incluir o seguinte no arquivo gradle.properties do seu projeto:

              android.debug.obsoleteApi=true
            

    Também é possível ativar a flag transmitindo -Pandroid.debug.obsoleteApi=true na linha de comando.

  • Você pode executar testes de instrumentação em módulos de recursos da linha de comando.

Mudanças de comportamento

  • Configuração lenta de tarefas: agora, o plug-in usa a nova API de criação de tarefas do Gradle (em inglês) para evitar a inicialização e a configuração de tarefas que não são necessárias para concluir o build atual (ou tarefas que não estejam no gráfico de tarefas em execução). Por exemplo, se você tiver diversas variantes de build, como "release" e "debug", e estiver criando a versão "debug" do seu app, o plug-in vai evitará inicializar e configurar tarefas para a versão "release" do app.

    Chamar alguns métodos antigos na API Variants, como variant.getJavaCompile(), ainda poderá forçar a configuração da tarefa. Para garantir que seu build seja otimizado para a configuração lenta de tarefas, invoque novos métodos que retornem um objeto TaskProvider, como variant.getJavaCompileProvider().

    Se você executa tarefas personalizadas de build, aprenda a adaptar-se à nova API de criação de tarefas do Gradle (em inglês).

  • Para um determinado tipo de build, ao configurar useProguard false, o plug-in agora vai usar o R8 em vez do ProGuard para reduzir e ofuscar o código e os recursos do app. Para saber mais sobre o R8, leia esta postagem do blog (em inglês) para desenvolvedores Android.

  • Geração de classe R mais rápida para projetos de biblioteca: anteriormente, o Plug-in do Android para Gradle gerava um arquivo R.java para cada uma das dependências do projeto e compilava essas classes R junto com as outras classes do app. O plug-in agora gera diretamente um JAR que contém a classe R compilada do seu app, sem criar classes R.java intermediárias antes. Essa otimização pode melhorar bastante a performance do build para projetos que incluem muitos subprojetos e dependências de biblioteca, além de melhorar a velocidade de indexação no Android Studio.

  • Ao criar um Android App Bundle, os APKs gerados desse pacote de apps destinado ao Android 6.0 (API de nível 23) ou mais recente agora incluem versões descompactadas das suas bibliotecas nativas por padrão. Essa otimização evita que o dispositivo tenha que fazer uma cópia da biblioteca e reduz o tamanho do app no disco. Se você preferir desativar essa otimização, adicione o código abaixo ao arquivo gradle.properties:

    android.bundle.enableUncompressedNativeLibs = false
            
  • O plug-in aplica versões mínimas de alguns plug-ins de terceiros.

  • Sincronização de projeto de variante única: sincronizar seu projeto com a configuração da build é uma etapa importante para permitir que o Android Studio entenda como o projeto está estruturado. No entanto, esse processo pode levar muito tempo em projetos grandes. Caso seu projeto use diversas variantes de build, você pode otimizar as sincronizações dele limitando-as apenas à variante selecionada no momento.

    Você precisa usar o Android Studio 3.3 ou mais recente com o Plug-in do Android para Gradle 3.3.0 ou mais recente para ativar essa otimização. Quando você atende a esses requisitos, o ambiente de desenvolvimento integrado pede que você ative essa otimização ao sincronizar seu projeto. A otimização também é ativada por padrão em novos projetos.

    Para ativar essa otimização manualmente, clique em File > Settings > Experimental > Gradle (Android Studio > Preferences > Experimental > Gradle em um Mac) e marque a caixa de seleção Only sync the active variant.

    Observação: essa otimização oferece suporte total a projetos que incluem as linguagens Java e C++ e suporte parcial para Kotlin. Ao ativar a otimização para projetos com conteúdo em Kotlin, a sincronização do Gradle volta a usar variantes completas internamente.

  • Download automático de pacotes SDK ausentes: essa funcionalidade foi expandida para oferecer suporte ao NDK. Para saber mais, leia Download automático de pacotes ausentes com o Gradle.

Correções de bugs

  • O Plug-in do Android para Gradle 3.3.0 corrige os seguintes problemas:

    • O processo de build chama android.support.v8.renderscript.RenderScript em vez da versão do AndroidX, mesmo que o Jetifier esteja ativado.
    • Conflitos causados porque o androidx-rs.jar inclui este elemento com empacotamento estático annotation.AnyRes.
    • Ao usar o RenderScript, não vai ser mais necessário definir manualmente a versão do Build Tools nos arquivos build.gradle.