2016-11-18 86 views
0

这对我来说并不新鲜,在Google为Android Studio 2.2.2发布Gradle插件之前,我已经这样做了好几个月,并破坏了文件查找功能。Android Gradle Build - 如何将环境变量注入资产目录中的属性文件?

使用案例:

我了Android工作室从詹金斯内以及运行gradle这个版本。我需要一些构建信息传递给构建,然后希望它被代码使用。这些值包括系统信息,构建变体,构建日期和关联构建风格的IP地址。

之前,我从2.1.3

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(/@[email protected]/, buildDate) 
       .replaceAll(/@[email protected]/, buildMode) 
       .replaceAll(/@[email protected]/, serverUrl) 
     propsFile.write(content, 'UTF-8') 
    } 
} 

切换到摇篮2.2.2上面的代码中查找在intermediate/assets/${variant.dirName}路径config.properties文件。然后处理该文件以用传递给replaceAll方法的变量替换标记有@ .. @的标记。现在

我的问题是:

的代码应该与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

@ArsenSench是的,我做到了。这没有效果。 – Pawan

回答

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 
+0

这是如何解决资产缺失目录的问题?我可以如何获取构建脚本中变量的值,但无法将其传递到资产目录中的文件。顺便说一句,我不使用gradle包装。我使用gradle(从安装)。 – Pawan

+0

它不使用资产目录。如果想使用'gradle.properties',需要用'gradlew'将它放在目录中。如果你使用gradle,我想有一个名为'gradle'的目录,里面有gradle包装器。 – utzcoz

相关问题