不同 string.xml 文件根据应用构建变体

Different string.xml files according to app Build Variants

我想根据构建 Variant/buildType 为 string.xml 不同值中的字符串分配一个值。我想象这样的事情:

res/values-debug/string.xml
    <string name="my_string">some debug value</string>

res/values-release/string.xml
    <string name="my_string">some release value</string>

但我在外面看不到这样的东西。 这可能吗?

resValue 'string', '<string_name>', "some string"

在 build.gradle 中为不同的构建 variants/product 风格定义不同的

可以通过您的 build.gradle 文件

buildTypes {
    release {
        resValue "string", "my_string", "some release value"
    }
    debug {
        resValue "string", "my_string", "some debug value"
    }
}

然后你就可以像@string/my_string一样在你想要的地方使用这个值

是的,这是可能的!

在您的 build.gradle 中,您可以添加如下内容:

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

然后在项目的 src 文件夹中应该有一个名为 main 的文件夹,在它旁边添加一个名为 debug 的文件夹。只要您正在构建调试风格,调试文件夹中的任何资源都会替换 main 中的资源,即发布文件夹。

应该是这样的:

src/
    main/
        java/ -- all your java code
        res/
            ...
            values/
                strings.xml
    debug/
        res/
            ...
            values/
                strings.xml

编辑:其他两个答案中的方法也可以正常工作。但是如果你有很多字符串,将它们保持为 xml 可能更容易处理。

您可以直接从 Android Studio 进行。例如,如果您的 "staging" 风格需要不同的应用程序名称,您可以 (Android Studio v3.5):

  • 右键单击值文件夹 -> 新建 -> 值资源文件
  • Select "staging" 在源设置菜单中
  • 指定 strings.xml 作为文件名

此时 Android Studio 会为您的特定构建变体生成一个额外的 strings.xml 文件。使用您的 "staging" 应用程序名称编辑创建的文件(例如 MyAppName - Staging)

build.gradle(应用程序)

productFlavors {
        stage {
            applicationIdSuffix ".staging"
            buildConfigField 'String', 'SITE_URL', '"[staging_link_here]"'
        }
        prod {
            buildConfigField 'String', 'SITE_URL', '"[production_link_here]"'
        }
 }