应用自定义构建逻辑

本节介绍了一些高级主题,这些主题在您希望扩展 Android Gradle 插件或编写自己的插件时非常有用。

将变体依赖项发布到自定义逻辑

库可以包含其他项目或子项目可能希望使用的功能。发布库是将库提供给其使用者的过程。库可以控制其使用者在编译时和运行时可以访问哪些依赖项。

有两个独立的配置用于保存每个类路径的传递依赖项,使用者必须使用这些配置来使用库,如下所述:

  • variant_nameApiElements: 此配置包含编译时可供使用者使用的传递依赖项。
  • variant_nameRuntimeElements: 此配置包含运行时可供使用者使用的传递依赖项。

要详细了解不同配置之间的关系,请访问Java 库插件配置

自定义依赖项解析策略

一个项目可能依赖于同一个库的两个不同版本,这可能导致依赖项冲突。例如,如果您的项目依赖于模块 A 的版本 1 和模块 B 的版本 2,并且模块 A 传递性地依赖于模块 B 的版本 3,则会发生依赖项版本冲突。

为解决此冲突,Android Gradle 插件采用以下依赖项解析策略:当插件检测到依赖项图中存在同一模块的不同版本时,默认情况下,它会选择版本号最高的那个。

但是,此策略可能并非总能按预期工作。要自定义依赖项解析策略,请使用以下配置来解析任务所需的特定变体依赖项:

  • variant_nameCompileClasspath: 此配置包含给定变体编译类路径的解析策略。
  • variant_nameRuntimeClasspath: 此配置包含给定变体运行时类路径的解析策略。

Android Gradle 插件包含获取器,可用于访问每个变体的配置对象。因此,您可以使用变体 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 {
            ...
        }
    }
}