我开发的Android应用程序有两种类型:免费和高级。每层有两个版本:轻量级和重型。 这是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。
我确信我可以通过一种傻瓜的方式来做我所要求的事情。 我找到了两个选项来处理这个问题:
实现一个函数,该函数检索我尝试汇编的当前flavor,并在目录路径中使用它的返回值。例如:
def combination = getCurrentFlavorCombination()
premiumImplementation fileTree(dir:" libs / $ combination",include:[' * .jar'])
这些是实现这个简单要求的丑陋且不可靠的方法: 高级层应该有一个与之关联的.jar - 该.jar的版本取决于另一个维度 - 发行版。
我没有要求太多,但在Gradle文档中无法找到一个很好的方法。我只找到了将库编译成罐子的方法,但是我已经把它装进了罐子里,我只想把它恰当地连接起来。也许你们可以帮助我。
非常感谢你!
答案 0 :(得分:0)
我通过Android工作室手册的this section说明你需要明确声明任何针对flavor / build类型组合的配置。在这种情况下,这意味着您需要在dependencies {}
块之前将以下内容添加到构建脚本中:
configurations {
freeLightweightImplementation
freeHeavyImplementation
premiumLightweightImplementation
premiumHeavyImplementation
}