build.gradle:如何仅在选定的flavor上执行代码

时间:2015-02-09 11:46:07

标签: android gradle

我在我的Android项目build.gradle中声明了这个函数:

def remoteGitVertsion() {
  def jsonSlurper = new JsonSlurper()
  def object = jsonSlurper.parse(new URL("https://api.github.com/repos/github/android/commits"))
  assert object instanceof List
  object[0].sha
}

这种味道:

android {
  ...
  productFlavors {
    internal {
      def lastRemoteVersion = remoteGitVersion()
      buildConfigField "String", "LAST_REMOTE_VERSION", "\"" + lastRemoteVersion + "\""
    }
    ...
  }
  ...
}

现在,由于gradle声明性质,每次构建项目时都会执行remoteGitVersion函数,无论构建风格是内部还是其他内容都无关紧要。因此,消耗了github API调用配额,过了一会儿,我收到一条很好的禁止消息。

我该如何避免这种情况?是否可以仅在选定的风味是正确的时才执行该功能?

1 个答案:

答案 0 :(得分:1)

从这里引用:

In Android/Gradle how to define a task that only runs when building specific buildType/buildVariant/productFlavor (v0.10+)

回顾一下:

1。将特定于风味的逻辑包装到任务中

task fetchGitSha << {
    android.productFlavors.internal {
        def lastRemoteVersion = remoteGitVersion()
        buildConfigField "String", "LAST_REMOTE_VERSION", "\"" + lastRemoteVersion + "\""
    }
}

2。无论何时构建变体,都要调用任务。只有这样。

在您的情况下,您可以使用assembleInternalDebug挂钩。

tasks.whenTaskAdded { task ->
    if(task.name == 'assembleInternalDebug') {
        task.dependsOn fetchGitSha
    }
}

3。确保从风味定义中删除动态内容

productFlavors {
    internal {
        # no buildConfigField here
    }
}

希望有所帮助。