builg.gradle: 如何只对选定的口味执行代码
builg.gradle: how to execute code only on selected flavor
我在我的 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 调用配额被消耗了,过了一会儿,我收到了一条很好的禁止消息。
我怎样才能避免这种情况?是否只有选择的口味合适才可以执行该功能?
从这里参考:
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
}
}
希望对您有所帮助。
我在我的 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 调用配额被消耗了,过了一会儿,我收到了一条很好的禁止消息。
我怎样才能避免这种情况?是否只有选择的口味合适才可以执行该功能?
从这里参考:
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
}
}
希望对您有所帮助。