如何更改每个Gradle构buildtypes的应用程序名称

我想找出一种方法来改变我的应用程序的每个构buildtypes的应用程序名称在Gradle中。

例如,我希望debugging版本具有<APP_NAME>-debug并且qa版本具有<APP-NAME>-QA

我很熟悉:

 debug { applicationIdSuffix '.debug' versionNameSuffix '-DEBUG' } 

但是,我似乎无法find一个gradle命令来应用在启动器中的应用程序的变化。

如果通过“应用程序名称”,你的意思是<application>上的android:label ,最简单的解决scheme是在一个string资源(例如, android:label="@string/app_name" )上有一个不同的版本src/debug/ sourceset中的string资源。

你可以看到在这个示例项目中 ,在src/debug/res/values/strings.xml有一个replaceapp_name ,这个src/debug/res/values/strings.xml将被用于debug版本。 release版本将使用src/main/app_name版本。

你可以使用这样的东西

  buildTypes { debug { applicationIdSuffix '.debug' versionNameSuffix '-DEBUG' resValue "string", "app_name", "AppName debug" } release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release zipAlignEnabled true resValue "string", "app_name", "AppName" } } 

您可以在AndroidManifest.xml文件中使用@ string / app_name

确保您从值/文件夹中删除app_name (不按此名称input)。

你可以用gradle来做到这一点:

 android { buildTypes { release { manifestPlaceholders = [appName: "My Standard App Name"] } debug { manifestPlaceholders = [appName: "Debug"] } } } 

然后在你的AndroidManifest.xml放入:

 <application android:label="${appName}"/> <activity android:label="${appName}"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

注意:它也适用于productFlavors

应用程序名称是用户可见的,这就是Google鼓励您将其保存在strings.xml文件中的原因。 您可以定义一个单独的string资源文件,其中包含特定于您的buildType的string。 这听起来像你可能有一个自定义的QA buildType。 如果不是这样,请忽略下面的qa部分。

 └── src ├── debug │  └── res │  └── buildtype_strings.xml ├── release │  └── res │  └── buildtype_strings.xml └── qa  └── res  └── buildtype_strings.xml 

我们需要一个解决scheme来支持应用程序名称与本地化(多语言)。 我已经使用@Nick Unuchek解决scheme进行了testing,但是构build失败(未find@ string /)。 修改这个bug有点改变:build.gradle文件:

 android { ext{ APP_NAME = "@string/app_name_default" APP_NAME_DEV = "@string/app_name_dev" } productFlavors{ prod{ manifestPlaceholders = [ applicationLabel: APP_NAME] } dev{ manifestPlaceholders = [ applicationLabel: APP_NAME_DEV ] } } 

值\ strings.xml中:

 <resources> <string name="app_name_default">AAA prod</string> <string name="app_name_dev">AAA dev</string> </resources> 

值恩\ strings.xml中:

 <resources> <string name="app_name_default">AAA prod en</string> <string name="app_name_dev">AAA dev en</string> </resources> 

的Manifest.xml:

 <application android:label="${applicationLabel}" > </application> 

对于更加dynamic的基于gradle的解决scheme(例如,在main的strings.xml设置一个基本应用程序名称,避免在每个flavor / buildtypes组合的strings.xml重复自己),请参阅我的答案: https : //stackoverflow.com/一个/一百十二万八千六百分之三千二百二十二万零四百三十六

为了支持翻译,请这样做:

1.删除string“app_name”

2.添加到gradle

  buildTypes { admin { resValue "string", "app_name", "@string/app_name_admin" } release { resValue "string", "app_name", "@string/app_name_release" } debug { resValue "string", "app_name", "@string/app_name_debug" } } 

3.将Manifest中的应用程序名称设置为“@ string / app_name”

4.添加到strings.xml值

 <string name="app_name_admin">App Admin</string> <string name="app_name_release">App release</string> <string name="app_name_debug">App debug</string>