如何更改每个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>