如何使用构建类型(debug vs release)来设置不同的样式和应用程序名称?

and*_*per 15 android android-resources android-studio android-productflavors android-build-type

背景

在Android Studio中,可以有不同的生成类型,每一种都有自己的配置,类似于产品的味道(如图所示这里)

问题

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

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

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

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

我发现我可以使用"resValue"(在这里找到它),但由于某种原因,无论我做什么,它都无法编译:

  • 如果资源已经被声明(比如在app-name中被翻译),则说资源是重复的
  • 如果资源未声明,我无法通过code/xml访问它.

这个问题

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

Com*_*are 21

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

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

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

请注意,我不是releasesourceset.特别是在重写资源时,这非常好 - 当您想要为该构建类型更改某些内容时,您只需要一个构建类型的源集,而不是您正在使用的每种构建类型.

  • @androiddeveloper:如果您在http://b.android.com上提交了相关问题,请考虑在此链接. (2认同)