本节介绍在您想要扩展 Android Gradle 插件或编写自己的插件时有用的高级主题。
将变体依赖项发布到自定义逻辑
库可以具有一些其他项目或子项目可能想要使用的功能。发布库是使库可供其使用者使用的过程。库可以控制其使用者在编译时和运行时可以访问哪些依赖项。
有两个单独的配置保存每个类路径的传递依赖项,使用者必须使用它们来使用如下所述的库
variant_nameApiElements
:此配置保存使用者在编译时可用的传递依赖项。variant_nameRuntimeElements
:此配置保存使用者在运行时可用的传递依赖项。
要详细了解不同配置之间的关系,请访问 Java 库插件配置。
自定义依赖项解析策略
项目可能包含对同一库的两个不同版本的依赖项,这可能导致依赖项冲突。例如,如果您的项目依赖于模块 A 的版本 1 和模块 B 的版本 2,而模块 A 传递依赖于模块 B 的版本 3,则会出现依赖项版本冲突。
为了解决此冲突,Android Gradle 插件使用以下依赖项解析策略:当插件检测到依赖项图中存在同一模块的不同版本时,默认情况下,它会选择版本号最高的那个。
但是,此策略可能并不总是按您的预期工作。要自定义依赖项解析策略,请使用以下配置来解析任务所需的变体的特定依赖项
variant_nameCompileClasspath
:此配置包含给定变体的编译类路径的解析策略。variant_nameRuntimeClasspath
:此配置包含给定变体的运行时类路径的解析策略。
Android Gradle 插件包含可用于访问每个变体的配置对象的 getter。因此,您可以使用变体 API 查询依赖项解析,如下面的示例所示
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 { ... } } }