Android 更改变量中的值

Android 更改变量中的值,android,gradle,android-studio,android-build,android-productflavors,Android,Gradle,Android Studio,Android Build,Android Productflavors,我有两种产品风格和三种构建类型 buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'pr

我有两种产品风格和三种构建类型

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"'
    }
}

是否有一种方法可以不基于产品风格而针对变体更改内容提供商权限的resValue?我希望product flavor new的所有构建都使用应用程序id+“.contentprovider”,但对于我们的product flavor old,如果调试或发布如上所示,请使用硬编码字符串,但要增强它,使其具有不同的qa构建类型硬编码字符串。

由于


请注意,在
main/res/values/strings.xml上不能有相同的字符串
name
,在build.gradle产品风格定义上不能有相同的字符串
resValue
,否则构建将抱怨
重复的
资源

TL;博士 让我们假设您想要为不同的产品风格更改
app\u name
string资源。您可以在
应用程序/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'
    }
}


尝试这样的操作
android.applicationVariants.all{variant->variant.resValue“color”、“colorPrimary”、“#”+theme.colorPrimary}
variant具有您需要的属性(如fx variant.name)。。。将其放入build.gradle中,不带“parent”(fx.:在文件末尾)我正在使用它来生成颜色主题,就像这样它为alpha X%创建AXX状态在哪里可以获得更多关于applicationVariants的文档?那是不是把它们都绕过去了?我只关心一个具体案例。我想我可以把它们都循环一遍,然后在其中加入某种“if”语句,以便对某个变量进行代码更改,是所有变体(构建类型x产品风格),如果可能,是。。。但是你仍然需要在所有变体中添加“内容提供商权限”,这样你就可以始终将“com.companyname.android.mobile.contentprovider”放在那里,如果它是一个特定的变体,就可以将它放在其他地方
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'
    }
}