应用自定义构建逻辑

本节介绍在您想要扩展 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 {
            ...
        }
    }
}