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

20

背景

在Android Studio中,您可以拥有不同的构建类型,每个类型都有自己的配置,类似于产品风味(如此处所示:这里)。

问题

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

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

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

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

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

  • 如果资源已经声明(例如在应用程序名称中,已翻译),则会显示资源重复
  • 如果资源未声明,则无法通过代码/xml访问它。

问题

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


这些构建类型“debug”、“release”在哪里定义的?我在DSL文档中找不到任何描述。 - Zingam
@Zingam,每当您创建新项目时,在gradle文件中都会看到“buildTypes”。 - android developer
2个回答

24
如何在构建类型中使用不同的资源值,即使它们已经存在?
它们已经存在于“main”源集中。为您感兴趣的其他构建类型添加其他源集,在这些源集中覆盖您想要的资源。
例如,在这个示例项目中,我有一个“main”源集和一个“debug”源集。两者都在“res/values/strings.xml”中拥有“app_name”字符串资源,但具有不同的值。在调试版本的构建中,将使用资源的“debug”源集版本; 在任何其他构建(例如“release”)中,完全忽略“debug”源集,并使用资源的“main”源集版本。
请注意,我没有“release”源集。特别是在覆盖资源时,这是完全可以接受的 - 您只需要为要更改某个构建类型的内容的构建类型添加源集,而不是对您正在使用的每个构建类型都需要添加源集。

此外,“resValue”究竟是用于什么? - android developer
2
@androiddeveloper:如果您在http://b.android.com上为此问题提交了问题,请考虑在此处添加链接。 - CommonsWare
1
@AmanVerma:“如果我将调试构建类型中定义的URL上传到Playstore的发布APK中,该URL会被暴露吗?”--如果您正确地完成了这个操作,那么该URL将不存在于发布APK中。 - CommonsWare
1
@AmanVerma:如果这是您唯一定义该URL的地方,则该URL不应存在于“发布”APK中。 - CommonsWare
1
@AmanVerma:build 目录下的 debug 目录内容不会被包含在 release APK 中。如果您还有其他疑虑,请单独在 Stack Overflow 提问。 - CommonsWare
显示剩余17条评论

-2
在文件|项目结构|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"


这不会改变调试和发布的资源值。这不是我问的内容。 - android developer
这与什么有关?OP想要设置不同的buildTypes,并且每个buildType的应用程序名称都需要不同的设置。 - sziraqui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接