链接特定风味与维度的依赖关系

时间:2018-04-26 12:40:44

标签: android gradle android-gradle

我开发的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。上面提到的每个颠覆都有一个:lightweightheavy

我尝试将简单的解决方案应用于此类依赖项:

premiumLightweightImplementation fileTree(dir: 'libs', include: ['*lightweight.jar'])
premiumHeavyImplementation fileTree(dir: 'libs', include: ['*heavy.jar'])

但是我得到了一个gradle错误:

  

无法为参数找到方法premiumLightweightImplementation()   [目录' libs']

当然这也适用于premiumHeavyImplementation。

我确信我可以通过一种傻瓜的方式来做我所要求的事情。 我找到了两个选项来处理这个问题:

  1. 完全停止使用尺寸(糟糕的解决方案,我必须自己编写所有风味组合)。
  2. 实现一个函数,该函数检索我尝试汇编的当前flavor,并在目录路径中使用它的返回值。例如:

    def combination = getCurrentFlavorCombination()
    premiumImplementation fileTree(dir:" libs / $ combination",include:[' * .jar'])

  3. 这些是实现这个简单要求的丑陋且不可靠的方法: 高级层应该有一个与之关联的.jar - 该.jar的版本取决于另一个维度 - 发行版。

    我没有要求太多,但在Gradle文档中无法找到一个很好的方法。我只找到了将库编译成罐子的方法,但是我已经把它装进了罐子里,我只想把它恰当​​地连接起来。也许你们可以帮助我。

    非常感谢你!

1 个答案:

答案 0 :(得分:0)

我通过Android工作室手册的this section说明你需要明确声明任何针对flavor / build类型组合的配置。在这种情况下,这意味着您需要在dependencies {}块之前将以下内容添加到构建脚本中:

configurations {
    freeLightweightImplementation
    freeHeavyImplementation
    premiumLightweightImplementation
    premiumHeavyImplementation
}