我正在努力找到一种方法,可以在gradle的每个构建类型中更改我的应用程序名称。
例如,我希望调试版本的名称为<APP_NAME>-debug
,QA版本的名称为<APP-NAME>-QA
。
我熟悉以下内容:
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
}
然而,我似乎找不到一个gradle命令来应用在启动器中的应用程序更改。
我正在努力找到一种方法,可以在gradle的每个构建类型中更改我的应用程序名称。
例如,我希望调试版本的名称为<APP_NAME>-debug
,QA版本的名称为<APP-NAME>-QA
。
我熟悉以下内容:
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
}
然而,我似乎找不到一个gradle命令来应用在启动器中的应用程序更改。
你可以使用类似这样的东西
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。
请确保从 values/ 文件夹中删除 app_name(没有该名称的条目)。
resValue“string”,“app_name”,System.getenv(“APP_NAME”)?:“MyApp”
- Aphex你可以使用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
。
清单合并器由于多个错误而失败,请参见日志。- aj0822ArpitJoshi
为了支持翻译,请执行以下操作:
1. 删除字符串“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. 在清单文件中将应用程序名称设置为"@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>
<string name="channel_name">@string/app_name</string>
。 - TomaszRykala应用程序名称是用户可见的,这就是为什么Google鼓励您将其保留在strings.xml文件中的原因。您可以定义一个单独的字符串资源文件,其中包含特定于您的buildTypes的字符串。听起来您可能有一个自定义的qa
buildType。如果不是这样,请忽略下面的qa部分。
└── src
├── debug
│ └── res
│ └── buildtype_strings.xml
├── release
│ └── res
│ └── buildtype_strings.xml
└── qa
└── res
└── buildtype_strings.xml
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 ]
}
}
values\strings.xml:
<resources>
<string name="app_name_default">AAA prod</string>
<string name="app_name_dev">AAA dev</string>
</resources>
values-cn\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>
AndroidManifest
中的application
中添加1个更多的tools:replace="android:label"
。 - LinhmanifestPlaceholders
或者 resValue
。例如:buildTypes {
release {
...
manifestPlaceholders = [appLabel: "My App"]
//resValue "string", "appLabel", '"My App"'
}
debug {
...
manifestPlaceholders = [appLabel: "My App - Debug"]
//resValue "string", "appLabel", '"My App - Debug"'
}
}
或者
如果你有productFlavors
,你可以在那里创建
flavorDimensions "env"
productFlavors {
dev {
dimension "env"
...
manifestPlaceholders = [appLabel: "My App - Development"]
//resValue "string", "appLabel", '"My App - Development"'
}
prod {
dimension "env"
...
manifestPlaceholders = [appLabel: "My Awesome App"]
//resValue "string", "appLabel", '"My Awesome App"'
}
}
android:label="${appLabel}"
` 更改为以下内容或者如果您正在使用 `resValue`,只需将 `android:label=@string/appLabel
` 更改即可。<application
...
android:label="${appLabel}"> //OR `android:label=@string/appLabel`
<activity
...
android:label="${appLabel}">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
注意:确保在<activity>
中也更改android:label
,并且必须属于LAUNCHER
类别。如果在<activity>
中不需要使用android:label
,请将其删除。
如果您不想直接添加到build.gradle
中,可以在所选的ProductFlavors
的values/string.xml
中添加。例如:
添加
<string name="appLabel">My App - Development</string>
<string name="appLabel">My Awesome App</string>
app/src/prod/res/values/string.xml
中。如果想要更加灵活的基于gradle的解决方案(例如在主要的strings.xml
中设置一个基本应用程序名称,并避免在每个口味/构建类型组合的strings.xml
中重复自己),请看我在这里的回答:https://dev59.com/C47da4cB1Zd3GeqP-j4f#32220436
您可以在不同的文件夹中使用strings.xml
,请参见Android分离发布和调试版本的字符串值。
因此,请创建此文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Your app name</string>
</resources>
app \ src \ debug \ res \ values \
和app \ src \ release \ res \ values \
文件夹中。在debug和release文件中替换“Your app name”。从app \ src \ main \ res \ values \
文件夹中的strings.xml
删除app_name
项。AndroidManifest
中你会有相同的内容。<application
android:label="@string/app_name"
...
没有任何变化。即使您添加了一个带有其AndroidManifest
文件和strings.xml
的库。
app/build.gradle
中:android {
...
buildTypes {
...
// Rename/Set default APK name prefix (app*.apk --> AwesomeApp*.apk)
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
def appName = "AwesomeApp"
outputFileName = appName+"-${output.baseName}-${variant.versionName}.apk"
}
}
}
app_name
,你当然可以翻译它,但这并非必要。如果想要测试未修改的release
版本的app_name
是否能正常工作且翻译正确,可以测试release
构建或创建一个“接近发布”的构建类型,只需添加应用程序 ID 后缀,而不改变字符串。 - CommonsWarestrings.xml
文件放在/src/debug/res/values/
目录下是无效的。相反,您需要在构建类型前指定版本名称,例如:如果您有一个名为Premium的版本,则文件夹名称应为:premiumDebug
。@CommonsWare,也许您应该相应地更新您的答案。 - Nimrod Dayan