Atualizações da API Android Gradle Plugin

Esta página monitora as descontinuações e remoções da API Android Gradle Plugin (AGP), além de fornecer informações sobre como atualizar seu código adequadamente.

Descontinuação de APIs e monitoramento de remoções

A tabela a seguir resume quando as APIs AGP são descontinuadas e removidas em relação à versão da AGP.

API Descontinuada na versão do AGP Removida da versão do AGP
Component.setAsmFramesComputationMode 7.2
Component.transformClassesWith 7.2
RenderScript 7.2
Transform 7.2 8.0

AGP 8.0

Veja a seguir atualizações importantes da API para a AGP 8.0.

A API Transform foi removida

A partir da AGP 8.0, a API Transform foi removida. Isso significa que todas as classes no pacote com.android.build.api.transform foram removidas.

A API Transform está sendo removida para melhorar o desempenho do build. Os projetos que usam a API Transform forçam a AGP a usar um fluxo menos otimizado para o build, podendo resultar em grandes regressões nos tempos de compilação. Também é difícil usar a API Transform e combiná-la com outros recursos do Gradle. O objetivo das APIs de substituição é facilitar a extensão da AGP sem introduzir problemas de precisão de desempenho ou compilação.

APIs de substituição

Não há uma substituição única para a API Transform. Em vez disso, há novas APIs voltadas para cada caso de uso. Todas as APIs de substituição estão no bloco androidComponents {}. Essas APIs estão disponíveis pela AGP 7.2.

Suporte à transformação de bytecode

Para transformar bytecode, use a API Instrumentation. No caso de bibliotecas, é possível registrar uma instrumentação apenas para classes de projetos locais. Para apps e testes, você pode escolher registrar uma instrumentação apenas para classes locais ou todas as classes, incluindo dependências locais e remotas. Para usar a API, a instrumentação é executada de maneira independente em cada classe, com acesso limitado a outras classes no caminho de classe (consulte createClassVisitor() para ver mais informações). Essa restrição melhora o desempenho de builds completos e incrementais, mantendo a superfície da API simples. Cada biblioteca é instrumentada em paralelo assim que fica pronta, e não depois que toda a compilação é concluída. Além disso, uma mudança em uma única classe significa que apenas as classes afetadas precisam ser reinstrumentadas em um build incremental. Para ver um exemplo de como usar a API Instrumentation, consulte o roteiro Como transformar classes com ASM da AGP.

Suporte à adição de classes geradas ao app

Para adicionar outras classes geradas ao app, use a API Artifacts com MultipleArtifact.ALL_CLASSES_DIRS. Especificamente, use

artifacts.use(TaskProvider)
  .wiredWith(...)
  .toAppend(Artifact.Multiple)

com MultipleArtifact.ALL_CLASSES_DIRS para anexar outros diretórios gerados às classes do projeto. A API Artifacts vai selecionar automaticamente um local exclusivo para a saída da tarefa personalizada. Consulte o roteiro addToAllClasses para ver um exemplo de como usar essa API.

Suporte a transformações com base na análise completa do programa

Para implementar transformações com base na análise completa do programa, todas as classes podem ser transformadas em uma única tarefa. Essa abordagem precisa ser usada com cuidado, já que tem um custo de desempenho de build muito maior do que o uso da API Instrumentation. Se o plug-in usar essa API, recomendamos que a transformação seja ativada por tipo de build. Assim, o desenvolvedor do app vai poder desativá-la em builds de desenvolvimento . O código a seguir mostra como registrar uma tarefa que transforma todas as classes ao mesmo tempo.

artifacts.use(TaskProvider)
  .wiredWith(...)
  .toTransform(Artifact.Multiple)

Use isso com MultipleArtifact.ALL_CLASSES_DIRS e MultipleArtifact.ALL_CLASSES_JARS para conectar todas as entradas e saídas necessárias à tarefa personalizada. Consulte o roteiro modifyAllClasses para ver um exemplo de como usar essa API e customizeAgpDsl para ver um exemplo de como registrar extensões personalizadas nos tipos de build do Android.

Se o caso de uso não for coberto por nenhuma das APIs AndroidComponents, informe um bug.

Vários plug-ins usados com frequência já migraram para essas novas APIs, incluindo o plug-in Monitoramento de desempenho do Firebase (1.4.1 é compatível com a AGP 8.0) e o plug-in Hilt Gradle (2.40.1 é compatível com a AGP 8.0). O AGP Upgrade Assistant também vai ajudar os desenvolvedores de projetos a fazer upgrade dos plug-ins mais usados, conforme necessário.

Se você estiver usando a API Transform com um plug-in de terceiros, informe ao autor que o plug-in vai precisar ser atualizado para funcionar com as novas APIs da AGP 8.0.

AGP 7.2

Veja a seguir atualizações importantes da API para a AGP 7.2.

O RenderScript foi descontinuado

A partir da versão 7.2 da AGP, as APIs do RenderScript foram descontinuadas. Elas ainda funcionam, mas vão invocar avisos e ser completamente removidas em versões futuras da AGP. Para saber como fazer a transição para o RenderScript, consulte Migrar do RenderScript.

Component.transformClassesWith e Component.setAsmFramesComputationMode foram descontinuados.

A partir da AGP 7.2, as APIs de instrumentação de bytecode da classe Component.transformClassesWith e Component.setAsmFramesComputationMode foram descontinuadas. Elas foram movidas para um novo bloco, Component.instrumentation, que contém todas as APIs relacionadas à configuração do processo de instrumentação. Para continuar usando esses recursos de instrumentação, use as APIs correspondentes no novo bloco, conforme mostrado no snippet de código a seguir:

androidComponents {
      onVariants(selector().all(), {
          instrumentation.transformClassesWith(AsmClassVisitorFactoryImpl.class,
                                               InstrumentationScope.Project) { params ->
              params.x = "value"
          }
          instrumentation.setAsmFramesComputationMode(
              COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS
          )
      })
  }