【发布时间】:2018-04-26 12:40:43
【问题描述】:
我正在开发一个有两种类型的安卓应用程序:免费和高级。每层有 2 个版本:轻量级和重型。 这是 Gradle 的实现:
flavorDimensions "tier", "distro"
productFlavors {
free {
dimension "tier"
}
premium {
dimension "tier"
}
lightweight {
dimension "distro"
}
heavy {
dimension "distro"
}
}
我正在尝试为高级层添加.jar 依赖项仅。添加方法很简单:
premiumImplementation fileTree(dir: 'libs', include: ['*.jar']) // Works
问题是我有两个版本的 .jar 。上面提到的每个颠覆一个:lightweight 和 heavy。
我尝试将简单的解决方案应用于这种类型的依赖:
premiumLightweightImplementation fileTree(dir: 'libs', include: ['*lightweight.jar'])
premiumHeavyImplementation fileTree(dir: 'libs', include: ['*heavy.jar'])
但我得到一个 gradle 错误:
找不到参数的方法 premiumLightweightImplementation() [目录'libs']
当然,这也适用于 premiumHeavyImplementation。
我确信有一种 gradle 方式来完成我的要求。 我找到了两种方法来处理这个问题:
- 完全停止使用维度(糟糕的解决方案,我必须自己编写所有风味组合)。
-
实现一个函数来检索我正在尝试组装的当前风味,并在目录路径中使用它的返回值。例如:
def 组合 = getCurrentFlavorCombination()
premiumImplementation fileTree(dir: "libs/$combination", include: ['*.jar'])
这些是实现这个简单要求的丑陋且不可靠的方法: 高级层应该有一个链接到它的 .jar - 该 .jar 的版本取决于另一个维度 - 发行版。
我并没有要求太多,但在 Gradle 文档中找不到这样做的好方法。我只找到了将库编译成 jar 的方法,但我的已经在 jar 中,我只想适当地链接它。也许你们可以在这里帮助我。
非常感谢!
【问题讨论】:
-
如果您明确声明相应的配置,您首选的解决方案是否有效,例如
configurations { premiumLightweightImplementation }? -
@PeterLedbrook OMG 这真的有效!!!请将此写为答案,以便我可以将其标记为已解决。我认为 gradle 不会理解配置名称和我正在组装的变体之间的联系。谢谢。
标签: android gradle android-gradle-plugin