Gradle中每种产品风味的属性

时间:2016-01-02 18:50:35

标签: android gradle android-productflavors

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

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

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

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

我做错了什么? :)

upd:defaultConfig:

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

2 个答案:

答案 0 :(得分: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文件。

答案 1 :(得分:-1)

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

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

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

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

BuildConfig.FIELD1
BuildConfig.FIELD2
BuildConfig.FIELD3