在变体中更改resValue

时间:2015-01-14 23:12:57

标签: android gradle android-studio android-build android-productflavors

我有两种产品口味和三种构建类型。

buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        signingConfig signingConfigs.release
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
    qa {
        applicationIdSuffix ".qa"
        signingConfig signingConfigs.release
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

productFlavors {
    old {
        applicationId "com.companyname.old"
        buildConfigField "String", "contentProvider", '"com.companyname.android.mobile.contentprovider"'
        resValue "string", "content_provider_authority", '"com.companyname.android.mobile.contentprovider"'

    }
    new {
        applicationId "com.companyname.new"
        buildConfigField "String", "contentProvider", '"' + applicationId + '.contentprovider"'
        resValue "string", "content_provider_authority", '"' + applicationId + '.contentprovider"'
    }
}

有没有办法可以根据产品风味改变content_provider_authority的resValue,但是对于变体?我希望所有产品版本的构建都使用应用程序ID +“。contentprovider”但是对于我们的产品风味旧,如果调试或发布如上所示使用硬编码字符串,但增强它以便为qa构建使用不同的硬编码字符串类型。

2 个答案:

答案 0 :(得分:0)

感谢Selvin

的评论,这段代码对我有用
productFlavors {
        red {
            ext {
                googleMapsKey = [debug: "AIza4115643435", release: "AIzaXXXXXXXXXX"]
            }
        }

        blue {
            ext {
                googleMapsKey = [debug: "AIza6363474341", release: "AIzaXXXXXXXXXX"]
            }
        }

        applicationVariants.all { variant ->
            def flavor = variant.productFlavors[0]
            variant.resValue  "string", "google_maps_key", "\"${flavor.ext.googleMapsKey[variant.buildType.name]}\""
        }
    }

答案 1 :(得分:0)

请注意,您的namemain/res/values/strings.xml上的build.gradle产品风味定义不能使用相同的字符串resValue,否则,该版本将抱怨duplicate资源

TL; DR;

让我们假设您要更改app_name字符串资源以适应不同的产品口味。您可以在app/build.gradle上插入/编辑以下代码。

flavorDimensions "default"

productFlavors{

    production {
        dimension "roadmap"
        applicationId "com.yourbundleid"
        versionCode 1
        versionName "0.1.0"
        resValue "string", "app_name", 'YourAwesomeApp'
    }

    beta {
        dimension "roadmap"
        applicationIdSuffix ".beta"
        versionNameSuffix "-beta"
        versionCode 1
        versionName "0.1.0"
        resValue "string", "app_name", 'YourAwesomeApp BETA'
    }

    dev {
        dimension "roadmap"
        applicationIdSuffix ".dev"
        versionNameSuffix "-dev"
        versionCode 1
        versionName "0.1.0"
        resValue "string", "app_name", 'YourAwesomeApp DEV'
    }
}