Esta seção descreve os tópicos avançados que são úteis para estender o plug-in do Android para Gradle ou para escrever seu próprio plug-in.
Publicar dependências variantes na lógica personalizada
Uma biblioteca pode ter funcionalidades que outros projetos ou subprojetos talvez queiram usar. Publicar uma biblioteca é o processo de disponibilização da biblioteca aos clientes. As bibliotecas podem controlar a quais dependências os clientes terão acesso no momento da compilação e execução.
Existem duas configurações diferentes que possuem as dependências transitivas de cada caminho de classe. Elas podem ser usadas pelos clientes para consumir a biblioteca, conforme descrito abaixo.
variant_nameApiElements
: essa configuração possui as dependências transitivas que estão disponíveis aos clientes no tempo de compilação.variant_nameRuntimeElements
: esta configuração possui as dependências transitivas que estão disponíveis aos clientes durante a execução.
Para saber mais sobre as relações entre as diferentes configurações, acesse Configurações de plug-in da Biblioteca Java (link em inglês).
Estratégias de resolução de dependências personalizadas
Um projeto pode incluir uma dependência em duas versões diferentes da mesma biblioteca, o que pode resultar em conflitos de dependência. Por exemplo, se o projeto depende da versão 1 do módulo A e da versão 2 do módulo B, e o módulo A depende transitivamente da versão 3 do módulo B, ocorre um conflito de versão de dependência.
Para resolver esse conflito, o Plug-in do Android para Gradle usa a seguinte estratégia de resolução de dependência: quando o plug-in detecta que diferentes versões do mesmo módulo estão no gráfico de dependência, por padrão, ele escolhe aquele com o número de versão mais alto.
No entanto, talvez essa estratégia não funcione sempre como o esperado. Para personalizar a estratégia de resolução de dependência, use as configurações abaixo para resolver dependências específicas de uma variante que são necessárias para sua tarefa:
variant_nameCompileClasspath
: esta configuração contém a estratégia de resolução do caminho de classe da compilação de uma determinada variante.variant_nameRuntimeClasspath
: essa configuração contém a estratégia de resolução do caminho de classe de execução de uma determinada variante.
O plug-in do Android para Gradle inclui getters que podem ser usados para acessar os objetos de configuração de cada variante. Assim, você pode usar a API da variante para consulte a resolução da dependência, conforme mostrado no exemplo abaixo:
Kotlin
android { applicationVariants.all { // Return compile configuration objects of a variant. compileConfiguration.resolutionStrategy { // Use Gradle's ResolutionStrategy API // to customize how this variant resolves dependencies. ... } // Return runtime configuration objects of a variant. runtimeConfiguration.resolutionStrategy { ... } // Return annotation processor configuration of a variant. annotationProcessorConfiguration.resolutionStrategy { ... } } }
Groovy
android { applicationVariants.all { variant -> // Return compile configuration objects of a variant. variant.getCompileConfiguration().resolutionStrategy { // Use Gradle's ResolutionStrategy API // to customize how this variant resolves dependencies. ... } // Return runtime configuration objects of a variant. variant.getRuntimeConfiguration().resolutionStrategy { ... } // Return annotation processor configuration of a variant. variant.getAnnotationProcessorConfiguration().resolutionStrategy { ... } } }