【问题标题】:How to use build types (debug vs release) to set different styles and app names?如何使用构建类型(调试与发布)来设置不同的样式和应用名称?
【发布时间】:2015-07-28 13:07:38
【问题描述】:

背景

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

问题

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

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

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

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

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

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

问题

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

【问题讨论】:

  • 这些构建类型在哪里定义为“调试”、“发布”。我在 DSL 文档中找不到任何描述。
  • @Zingam 每当您创建新项目时,您都会在 gradle 文件中看到“buildTypes”。

标签: android android-studio android-resources android-productflavors android-build-type


【解决方案1】:

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

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

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

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

【讨论】:

  • 所以你的意思是我不需要在“build.gradle”文件中使用“buildTypes”来完成这个任务,而只需将资源文件放在每个构建类型的文件夹中?在“src”文件夹中,一个在“main”文件夹,一个在“debug”文件夹?
  • @androiddeveloper:如果您在b.android.com 上提出问题,请考虑在此处链接。
  • @AmanVerma:“如果我将发布 apk 上传到 playstore,我在调试构建类型中定义的 URL 是否会暴露。” -- 如果您正确地执行了此操作,则该 URL 将不会存在于发布 APK 中。
  • @AmanVerma:该 URL 不应该存在于 release APK 中,如果这是您定义该 URL 的唯一位置。
  • @AmanVerma:build 目录下的debug 目录的内容不包含在release APK 中。如果您还有其他问题,请提出单独的 Stack Overflow 问题。
【解决方案2】:

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

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”

【讨论】:

  • 这不会更改调试和发布的资源值。不是我问的
  • 这有什么关系? OP 想要设置不同的 buildTypes 并且每个 buildType 的应用名称设置不同
猜你喜欢
  • 1970-01-01
  • 2021-09-03
  • 2016-06-04
  • 1970-01-01
  • 2011-06-19
  • 2017-12-10
  • 2022-11-02
  • 2010-09-13
  • 2015-02-14
相关资源
最近更新 更多