这对我来说并不是什么新鲜事,在谷歌发布适用于Android工作室版本2.2.2的Gradle插件之前,我已经这样做了几个月,它打破了文件查找功能。
使用案例
我在Android工作室和Jenkins中运行gradle构建。我需要将一些构建信息传递给构建,然后希望它由代码使用。这些值包括系统信息,构建变体,构建日期和相关构建版本的IP地址。
在我从2.1.3
切换到Gradle 2.2.2之前android.applicationVariants.all { variant ->
variant.mergeResources.doLast {
File propsFile = file("${buildDir}/intermediates/assets/${variant.dirName}/config.properties")
println("Filtering resource file: " + propsFile)
String content = propsFile.getText('UTF-8')
println("File contents: " + content)
content = content.replaceAll(/@build.date@/, buildDate)
.replaceAll(/@build.mode@/, buildMode)
.replaceAll(/@serverUri@/, serverUrl)
propsFile.write(content, 'UTF-8')
}
}
以上代码在intermediate/assets/${variant.dirName}
路径中查找config.properties文件。然后处理该文件,用传递给replaceAll方法的变量替换标有@ .. @的标记。
现在我的问题是:
该代码应该适用于较新的Gradle插件版本2.2.2。但是,我发现较新的版本不会在中间目录中生成资产文件夹,因此上面的代码无法查找文件并抛出以下错误:
Execution failed for task ':app:mergeDebugResources'.
> /home/pawan/git/MyApplication/app/build/intermediates/assets/debug/config.properties (No such file or directory)
很明显,较新的版本改变了构建操作的工作方式。现在的问题是,我该如何从这一点开始呢?如何实现预期的功能?任何解决方法或修复方法?
答案 0 :(得分:0)
可能会Build Environment对您有所帮助。您可以在gradle.properties
中定义环境变量并为其分配默认值。在你build.gradle
文件中,只有这样的环境变量。在jenkins中,使用gradlew
将您的需求值分配给变量,默认值将被替换。
例如,在gradle.properties
:
versCode=100
在build.gradle
:
defaultConfig {
// Other configs
versionCode versCode as Integer
}
在你的jenkens构建脚本中:
./gradlew -PversCode=200 build