我正在尝试找出一种方法,可以在gradle中更改每个构建类型的应用程序的应用程序名称。
例如,我希望调试版本为<APP_NAME>-debug
,qa版本为<APP-NAME>-QA
。
我熟悉:
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
}
但是,我似乎无法在启动器中找到应用更改应用程序的gradle命令。
答案 0 :(得分:134)
如果使用&#34;应用名称&#34;,则表示android:label
上的<application>
,最简单的解决方案是将该点放在字符串资源上(例如android:label="@string/app_name"
) ,然后在src/debug/
源集中拥有该字符串资源的不同版本。
您可以在this sample project中看到app_name
,src/debug/res/values/strings.xml
替换debug
,release
将用于app_name
版本。 src/main/
版本将使用{{1}}中的{{1}}版本。
答案 1 :(得分:47)
您可以使用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
。
答案 2 :(得分:27)
要支持翻译,请执行以下操作:
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. 将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>
答案 3 :(得分:12)
应用名称是用户可见的,这就是Google鼓励您将其保留在strings.xml文件中的原因。您可以定义一个单独的字符串资源文件,其中包含特定于buildTypes的字符串。听起来您可能有自定义qa
buildType。如果不成立,请忽略下面的qa部分。
└── src
├── debug
│ └── res
│ └── buildtype_strings.xml
├── release
│ └── res
│ └── buildtype_strings.xml
└── qa
└── res
└── buildtype_strings.xml
答案 4 :(得分:8)
我们需要一个解决方案来支持具有本地化的应用名称(适用于多语言)。 我已经使用@Nick Unuchek解决方案进行了测试,但构建失败(未找到@ 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>
答案 5 :(得分:2)
您可以在不同的文件夹中使用strings.xml
,请参见Android separate string values for release and debug builds。
因此,创建此文件:
<?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\
文件夹中。在调试和发布文件中替换“您的应用程序名称”。从app_name
文件夹中的strings.xml
中删除app\src\main\res\values\
项。
在AndroidManifest
中,您将拥有相同的
<application
android:label="@string/app_name"
...
完全没有变化。即使您添加了带有AndroidManifest
文件和strings.xml
的库。
答案 6 :(得分:0)
您可以采取多种方式。
您可以在应用程序级别manifestPlaceholders
中创建resValue
OR build.gradle
。例如
buildTypes {
release {
...
manifestPlaceholders = [appLabel: "My App"]
//resValue "string", "appLabel", '"My App"'
}
debug {
...
manifestPlaceholders = [appLabel: "My App - Debug"]
//resValue "string", "appLabel", '"My App - Debug"'
}
}
OR
如果您有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"'
}
}
然后在AndroidManifest.xml
中使用manifestPlaceholders
,只需按以下方式更改android:label="${appLabel}"
或,如果您使用resValue
,只需更改{ {1}}
android:label=@string/appLabel
注意:请确保同时更改<application
...
android:label="${appLabel}"> //OR `android:label=@string/appLabel`
<activity
...
android:label="${appLable}">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
类别的android:lable
中的<activity>
。如果不需要在LAUNCHER
中使用android:label
,只需删除它即可。
如果您不想直接添加<activity>
,则可以添加所选build.gradle
的{{1}}。例如
添加
values/string.xml
在ProductFlavors
和
<string name="appLabel">My App - Development</string>
在app/src/dev/res/values/string.xml
答案 7 :(得分:-1)
正如作者要求在 Gradle 中执行此操作一样,我们可以假定他想在脚本中而不是在配置文件中执行此操作。由于 Android Studio 和 Gradle 在去年(〜2018年)都已进行了重大更新和修改,因此上述所有其他答案似乎过于扭曲。简便的方法是将以下内容添加到您的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"
}
}
}