Android 构建变体:为除一个变体之外的所有变体声明依赖项

问题描述

我有 5 个构建变体。 4 个不同的构建变体(“内部”)需要一组给定的 gradle 依赖项,而 1 个构建变体(“外部”)则不需要。引用这些依赖项的代码仅位于内部构建变体的 /src 文件夹中。

我能否更简洁地声明“除此变体之外的所有”都需要给定的依赖项列表?

这就是我们现在的应用级 build.gradle 文件的处理方式:

internalDevelopmentImplementation(name:'MyGreatDependency-1.1.0',ext:'jar')
internalDevelopmentImplementation(name:"MyGreatDependency-logger-1.1.0",ext:'aar')
internalDevelopmentImplementation(name:"MyGreatDependency-android-2.0.0",ext:'aar')
internalDevelopmentImplementation(name:"MyGreatDependency-extension-android-1.1",ext:'aar')

internalReleaseImplementation(name:'MyGreatDependency-1.1.0',ext:'jar')
internalReleaseImplementation(name:"MyGreatDependency-logger-1.1.0",ext:'aar')
internalReleaseImplementation(name:"MyGreatDependency-android-2.0.0",ext:'aar')
internalReleaseImplementation(name:"MyGreatDependency-extension-android-1.1",ext:'aar')

internalStageImplementation(name:'MyGreatDependency-1.1.0',ext:'jar')
internalStageImplementation(name:"MyGreatDependency-logger-1.1.0",ext:'aar')
internalStageImplementation(name:"MyGreatDependency-android-2.0.0",ext:'aar')
internalStageImplementation(name:"MyGreatDependency-extension-android-1.1",ext:'aar')

internalProdImplementation(name:'MyGreatDependency-1.1.0',ext:'jar')
internalProdImplementation(name:"MyGreatDependency-logger-1.1.0",ext:'aar')
internalProdImplementation(name:"MyGreatDependency-android-2.0.0",ext:'aar')
internalProdImplementation(name:"MyGreatDependency-extension-android-1.1",ext:'aar')

然后,externalProd 变体根本不声明依赖项。

有什么办法可以改进吗?

解决方法

这里有一个想法:使用配置继承。使用大多数配置共享的依赖项创建配置,在那里设置公共依赖项。让其他人从这个延伸。类似的东西:

configurations {
    // Add the bulk of dependencies to this one:
    commonImplementation {}

internalDevelopmentImplementation.extendsFrom(commonImplementation)
    internalReleaseImplementation.extendsFrom(commonImplementation)
    // And so on

免责声明:我没有测试过这个。 检查https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ConfigurationContainer.html

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...