在gradle中添加对特定productFlavor和buildType的依赖性

luk*_*tei 14 android build gradle

我想知道如何在gradle中为特定的productFlavor和buildType添加依赖项.例如,我有productFlavor free和构建类型release,如何添加对assembleFreeRelease任务的依赖?

我尝试了很多变种,但都没有效果.

例如我试过:

task('release', dependsOn: assembleProductionRelease) {
} 
// error: Could not find property 'assembleProductionRelease' on root project 'app'.
Run Code Online (Sandbox Code Playgroud)

要么:

task('release', dependsOn: 'assembleProductionRelease') {
}
Run Code Online (Sandbox Code Playgroud)

这里没有错误,但是为每种风味和构建类型执行任务,非常令人困惑.

Ser*_*kyi 15

对flavor和buildType依赖项有内置支持.

dependencies {
   flavor1Compile "..."
   freeReleaseCompile "..."
}
Run Code Online (Sandbox Code Playgroud)

http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Sourcesets-and-Dependencies

  • 但是如何将flavor与buildTypes结合起来,例如flavor1DebugCompile或flavor1ReleaseCompile.它对我不起作用 (5认同)
  • 如果你的依赖块阻塞在android块之后,这是有效的 (3认同)

Ben*_*hko 12

这些任务是根据您的Android插件配置动态生成的.在配置时,它们尚不可用.您可以通过两种方式推迟创建任务:

等到评估项目.

afterEvaluate {
    task yourTask(dependsOn: assembleFreeRelease) {
        println "Your task"
    }
}
Run Code Online (Sandbox Code Playgroud)

Lazily将任务依赖声明为String.

task yourTask(dependsOn: 'assembleFreeRelease') {
    println "Your task"
}
Run Code Online (Sandbox Code Playgroud)


ces*_*sar 6

现在看起来像android gradle插件的版本1和gradle 2.2+,您可以使用配置执行此操作:

configurations {
  freeReleaseCompile
}

android {
   ...
  productFlavors {
    free {
      ...
    }
  }
}

dependencies {
  freeReleaseCompile('myLib@aar')
}
Run Code Online (Sandbox Code Playgroud)

参考:https://groups.google.com/forum/#! msg/ adt- dev/ E2H_rNyO6- o/ h-zFJso-ncoJ