如何使用构建类型(调试与发布)来设置不同的样式和应用程序名称?

How to use build types (debug vs release) to set different styles and app names?

背景

在AndroidStudio上,你可以有不同的构建类型,每个都有自己的配置,类似于product-flavors(如图here

问题

我希望每次我在某个地方安装我的应用程序时,我都能立即知道它是哪种类型 - 发布或调试,只需查看它。

为此,我想我可以使用 build.gradle 文件:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        debuggable true
    }
}

问题是,我不知道该放什么。我希望应用程序名称不同(但在字符串文件中有字符串,因为它是翻译的),我想将应用程序中的某些内容的样式设置为不同(例如,操作栏的颜色) .

我发现我可以使用 "resValue"(找到它 ),但出于某种原因,无论我做什么,它都不会编译:

问题

如何为构建类型使用不同的资源值,即使它们已经存在?

How do I use different resource values for the build types, even if they already exist?

它们已经存在于 main 源集中。为您感兴趣的其他构建类型添加其他源集,您可以在其中覆盖所需的资源。

例如,在 this sample project 中,我有一个 main 源集和一个 debug 源集。两者在 res/values/strings.xml 中都有 app_name 字符串资源,但具有不同的值。在 debug 构建中,将使用资源的 debug 源集版本;在任何其他构建中(例如 release),debug 源集将被完全忽略,并使用资源的 main 源集版本。

请注意,我没有 release 源集。特别是在覆盖资源时,这非常好——当您想要为构建类型更改某些内容时,您只需要一个构建类型的源集,而不是为您正在使用的每个构建类型。

在文件|项目结构|应用程序|风格中我们有:

Version Name: 1.3

在字符串资源文件中我们有:

<string name="app_name">MyAppTitle</string>

在 MainActivity "onCreate" 中 class:

...
//add version to application title
int versionCode = BuildConfig.VERSION_CODE; // unused in my application
String versionName = BuildConfig.VERSION_NAME;
this.setTitle(this.getTitle() + " v"+  versionName);
...

结果是"MyAppTitle v1.3"