18

背景

在 Android Studio 上,您可以有不同的构建类型,每种都有自己的配置,类似于 product-flavors(如图所示

问题

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

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

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

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

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

  • 如果资源已被声明(如在翻译的 app-name 中),则表示该资源是重复的
  • 如果没有声明资源,我无法通过 code/xml 访问它。

问题

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

4

2 回答 2

24

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

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

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

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

于 2015-05-16T18:35:07.967 回答
-2

在 File|Project Structure|app|Flavors 我们有:

Version Name: 1.3

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

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

在 MainActivity 类的“onCreate”中:

...
//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”

于 2016-08-15T16:35:13.603 回答