【问题标题】:Properties for each product flavor in GradleGradle 中每种产品风味的属性
【发布时间】:2016-01-02 18:50:35
【问题描述】:

是否可以在 Gradle 中为两种产品风味创建两个 .properties 文件?

我正在构建一个具有两种风格的 Android 应用程序,我想为它们设置单独的属性,但这里有覆盖变量的问题:

productFlavors {
    flavor1 {
        customProperties = getCustomProperties("flavor1.properties");
    }
    flavor2 {
        customProperties = getCustomProperties("flavor2.properties");
    }
}

我的 customProperties 变量总是从 flavor2 属性中获取值,即使我构建了 flavor1

我做错了什么? :)

更新:默认配置:

 defaultConfig {
    minSdkVersion 17
    targetSdkVersion 22
    // Enabling multidex support.
    multiDexEnabled true
}

【问题讨论】:

    标签: android gradle android-productflavors


    【解决方案1】:

    我用过这样的东西:

    flavorDimensions "default"
        productFlavors {
            stand {
    
                def standPropsFile = file("${project.projectDir}/../stand.properties")
                Properties standProps = new Properties()
                if (standPropsFile.canRead()) {
                    standProps.load(new FileInputStream(standPropsFile))
                }
                manifestPlaceholders = standProps
                applicationId = manifestPlaceholders["APP_ID"]
            }
    
            google {
                def standPropsFile = file("${project.projectDir}/../google.properties")
                Properties standProps = new Properties()
                if (standPropsFile.canRead()) {
                    standProps.load(new FileInputStream(standPropsFile))
                }
                manifestPlaceholders = standProps
                applicationId = manifestPlaceholders["APP_ID"]
            }
        }
    

    manifestPlaceholders - 只是 Map mManifestPlaceholders 的设置器,因此在“manifestPlaceholders = standProps”之后,您可以在 .properties 文件中直接使用值。

    【讨论】:

      【解决方案2】:

      您还应该更改构建变体并选择正确的风格以使所需风格的每个配置生效。

      或者,如果您在属性文件中只有几个字段,并且只想为每种风格设置不同的值:您可以使用 BuildConfigFields,如下所示:

      buildConfigField 'String', 'FIELD1', '"value1"'
      buildConfigField 'String', 'FIELD2', '"value2"'
      buildConfigField "String", "FIELD3", "value2"
      

      这些可以在整个项目的任何地方使用 BuildConfig 类访问,如下所示:

      BuildConfig.FIELD1
      BuildConfig.FIELD2
      BuildConfig.FIELD3
      

      【讨论】:

      • 我尝试构建两种口味,但我总是得到 flavor2.properties
      • 你也可以分享你的默认配置吗?
      • 您还可以检查替代机制(在我的答案中更新)以使每种产品风味具有不同的值吗?您可以避免切换和维护每种风格的单独文件的复杂性。
      • 当然,如果它符合您的目的,请告诉我。
      • 终于,我找到了解决方案here,但你的回答也是对的。接受它:)
      猜你喜欢
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 2015-07-09
      相关资源
      最近更新 更多