Plug-in do Android para Gradle 3.4.0 (abril de 2019)

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

3.4.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.4.2 (julho de 2019)

Esta atualização pequena tem suporte ao Android Studio 3.4.2 e inclui várias correções de bugs e melhorias na performance. 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.4.1 (maio de 2019)

Esta atualização pequena tem suporte ao Android Studio 3.4.1 e inclui várias correções de bugs e melhorias na performance. 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).

Novos recursos

  • Novas configurações de dependência de verificação de lint: o comportamento de lintChecks mudou, e uma nova configuração de dependência (lintPublish) foi apresentada para oferecer mais controle sobre as verificações de lint que são empacotadas nas bibliotecas do Android.

    • lintChecks: esta é uma configuração existente necessária para verificações de lint que você queira executar somente ao criar seu projeto localmente. Se você estava usando a configuração de dependência lintChecks anteriormente para incluir verificações de lint no AAR publicado, vai precisar migrar essas dependências para usar a nova configuração lintPublish descrita abaixo.
    • lintPublish: use esta nova configuração em projetos de biblioteca para verificações de lint que você queira incluir no AAR publicado, conforme mostrado abaixo. Isso significa que os projetos que consomem sua biblioteca também aplicam essas verificações de lint.

    O exemplo de código a seguir usa as duas configurações de dependência em um projeto de biblioteca local do Android.

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • Em geral, as tarefas de empacotamento e assinatura terão uma melhoria geral na velocidade de build. Se você perceber uma regressão de desempenho relacionada a essas tarefas, informe um bug.

Mudanças de comportamento

  • Aviso de descontinuação do plug-in do recurso Apps instantâneos Android: se você ainda estiver usando o plug-in com.android.feature para criar seu app instantâneo, o Plug-in do Android para Gradle 3.4.0 vai mostrar um aviso de descontinuação. Para garantir que seja possível criar seu app instantâneo em versões futuras do plug-in, migre-o para o plug-in de recurso dinâmico, que também permite a publicação das suas experiências de apps instalados e instantâneos de um único Android App Bundle.

  • R8 ativado por padrão: o R8 integra a simplificação, redução, ofuscação, otimização e dexação em uma única etapa, o que resulta em melhorias significativas na performance do build (em inglês). O R8 foi apresentado no Plug-in do Android para Gradle 3.3.0 e agora está ativado por padrão nos projetos de biblioteca Android e em apps que usam o plug-in 3.4.0 ou mais recente.

A imagem abaixo fornece uma visão geral de alto nível do processo de compilação antes da inclusão do R8.

Antes do R8, o ProGuard era uma etapa de compilação diferente da dexação e da simplificação de leitura.

Agora, com o R8, a simplificação, redução, ofuscação, otimização e dexação (D8) são todas concluídas em uma única etapa, conforme ilustrado abaixo.

Com o R8, a simplificação, redução, ofuscação, otimização e
      dexação são concluídas em uma única etapa de compilação.

Lembre-se de que o R8 foi projetado para funcionar com suas regras do ProGuard. Desse modo, você provavelmente não precisa fazer nada para se beneficiar com o R8. No entanto, como essa é uma tecnologia diferente do ProGuard e é projetada especificamente para projetos Android, a redução e a otimização podem resultar na remoção de códigos que o ProGuard talvez não removesse. Nessa situação improvável, talvez seja necessário adicionar outras regras para manter esse código no resultado de build.

Se você tiver problemas ao usar o R8, leia as Perguntas frequentes de compatibilidade do R8 (em inglês) para conferir se há uma solução para o problema. Se nenhuma solução tiver sido documentada, informe um bug. Você pode desativar o R8 adicionando uma das seguintes linhas ao arquivo gradle.properties do projeto:

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

Observação: para determinado tipo de build, se você definir useProguard como false no arquivo build.gradle do módulo do app, o Plug-in do Android para Gradle vai usar o R8 para reduzir o código desse tipo de build, independente de você ter ou não desativado o R8 no arquivo gradle.properties.

  • O uso de ndkCompile foi descontinuado: agora você vai encontrar um erro de build se tentar usar o ndkBuild para compilar bibliotecas nativas. Em vez disso, use o CMake ou o ndk-build para adicionar código C e C++ ao seu projeto.

Problemas conhecidos

  • O uso correto de nomes de pacotes únicos não é obrigatório atualmente, mas se torna mais rigoroso em versões mais recentes do plug-in. No Plug-in do Android para Gradle versão 3.4.0, você pode conferir se o projeto declara nomes de pacotes aceitáveis adicionando a linha abaixo ao seu arquivo gradle.properties.

              android.uniquePackageNames = true
              
            

    Para saber mais sobre como definir um nome de pacote com o Plug-in do Android para Gradle, consulte Definir o ID do aplicativo.