在依赖中选择特定的构建类型

Ebo*_*ike 7 android android-build android-gradle-plugin

假设我有一个具有三种构建类型的Android应用:

buildTypes {
    release {
        ....
    }
    optRelease {
        ....
    }
    debug {
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个依赖模块:

dependencies {
    implementation project(':myDependency')
}
Run Code Online (Sandbox Code Playgroud)

假设此依赖项只有两种构建类型(比如debugrelease),我想完全控制我的应用程序的哪种构建类型使用哪种依赖项的构建类型。例如,我希望我的应用程序optRelease使用库的release,而应用程序release使用库的debug

在Android Studio 3.0之前,这曾经是可能的,但是新的构建变体系统似乎不再允许这样做了。

如何明确说明要使用的构建类型?假设我无法控制依赖项,并且无法修改其gradle配置。

Sag*_*gar 6

您可以使用 matchingFallback

buildTypes {
    release {
       matchingFallbacks = ['debug']
       ... 
    }
    optRelease {
       matchingFallbacks = ['release']  
       ...
    }
    debug {
       matchingFallbacks = ['debug']  
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以如下指定后备列表:

optRelease {
    matchingFallbacks = ['release','debug']  
}
Run Code Online (Sandbox Code Playgroud)

这将指定在依赖项不包括“ optRelease”构建类型时插件应尝试使用的后备构建类型的排序列表。您可以根据需要指定任意数量的后备,并且插件会选择依赖项中可用的第一个构建类型

您可以参考官方文档以了解更多详细信息。

但是,如果要在定位外部依赖项时使用特定于变体的配置。您可以按照以下步骤进行操作:

debugImplementation project(':myDependency')

这将myDependency仅依赖模块的“调试”版本。


Iva*_*vic 0

从 gradle 3.0.0 开始,您可以使用以下默认项目变体(发布、调试、测试等)

  • 执行
  • 发布实现
  • 测试实施
  • 调试实现
  • android测试实现

简单的例子是:

android {
   ....
}
dependencies {
    implementation "com.google.dagger:dagger-android-support:$DAGGER_VERSION"
    androidTestImplementation jUnit
    testImplementation mockito
}
Run Code Online (Sandbox Code Playgroud)

如果您的应用程序有多种风格,从 3.0 开始,您必须首先声明风格维度,在默认配置中定义回退和匹配策略(对于远程依赖项和没有维度的依赖项),并且 gradle 将识别应包含哪些依赖项味道。有关更多信息,请查看迁移指南。