如果Android Gradle Build

时间:2018-01-09 17:00:05

标签: android gradle groovy android-gradle

目前,我的android项目从本地属性文件加载两个参数以填充一些Build.Config常量。拥有单独文件的目的是使其不受源代码管理。 (git忽略此文件)。其中的值对生产构建没有价值,并且可能经常被开发人员更改。我不希望更改这些值以构成build.gradle的更改。

我现在的问题是,由于此属性文件不在源代码管理中,因此新建克隆和签出将无法构建,因为该文件不存在。在文件不存在的情况下,我希望脚本创建它并将默认参数保存到它。

我当前的build.gradle从属性文件中读取:

Properties properties = new Properties()
properties.load(project.file('local.properties').newDataInputStream())
def spoofVin = properties.getProperty('spoof.vin', '12345678901234567')
def spoofDap = properties.getProperty('spoof.dap', '999999999999')
buildConfigField("String", "SPOOF_VIN", '"' + spoofVin + '"')
buildConfigField("String", "SPOOF_DAP", '"' + spoofDap + '"')

我在下面发布我自己的解决方案,如果他们有相同的需求,希望能帮助其他人。我不是gradle pro,所以如果你知道更好的方法,请发布你的解决方案。

1 个答案:

答案 0 :(得分:1)

我发现以下代码可以完成此任务。 properties.store方法方便地让我在properties.local文件的顶部添加字符串注释。

//The following are defaults for new clones of the project.
//To change the spoof parameters, edit local.properties
def defaultSpoofVin = '12345678901234567'
def defaultSpoofId = '999999999999'
def spoofVinKey = 'spoof.vin'
def spoofIdKey = 'spoof.id'

Properties properties = new Properties()
File propertiesFile = project.file('local.properties')
if (!propertiesFile.exists()) {
    //Create a default properties file
    properties.setProperty(spoofVinKey, defaultSpoofVin)
    properties.setProperty(spoofIdKey, defaultSpoofId)

    Writer writer = new FileWriter(propertiesFile, false)
    properties.store(writer, "Change these variables to spoof different IDs and VINs. Don't commit this file to source control.")
    writer.close()
}

properties.load(propertiesFile.newDataInputStream())
def spoofVin = properties.getProperty(spoofVinKey, defaultSpoofVin)
def spoofId = properties.getProperty(spoofIdKey, defaultSpoofId)
buildConfigField("String", "SPOOF_VIN", '"' + spoofVin + '"')
buildConfigField("String", "SPOOF_ID", '"' + spoofId + '"')