Как изменить имя приложения на <тип сборки> w140>
Я пытаюсь найти способ изменить имя приложения приложения для каждого типа сборки в gradle.
Например, я хотел бы, чтобы версия отладки имела <APP_NAME>-debug
и версию qa <APP-NAME>-QA
.
Я знаком с:
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
}
Однако я не могу найти команду gradle, чтобы применить изменение приложения, когда оно находится в панели запуска.
Ответы
Ответ 1
Если под "именем приложения" вы подразумеваете android:label
для <application>
, самое простое решение - указать эту точку на строковом ресурсе (например, android:label="@string/app_name"
), а затем использовать другую версию этот строковый ресурс в src/debug/
sourceset.
Вы можете видеть это в этом примере проекта, где у меня есть замена для app_name
в src/debug/res/values/strings.xml
, которая будет применяться для debug
сборок. release
сборках release
будет использоваться версия app_name
в src/main/
.
Ответ 2
Вы можете использовать что-то вроде этого
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"
}
}
Вы можете использовать @string/app_name в файлах AndroidManifest.xml.
Убедитесь, что вы удалили имя_приложения из значений/папки (нет записи по этому имени).
Ответ 3
Вы можете сделать это с помощью 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
.
Ответ 4
Для поддержки переводов сделайте следующее:
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>
Ответ 5
Имя приложения видимо для пользователя, и поэтому Google поощряет вас хранить его в файле strings.xml. Вы можете определить отдельный файл строковых ресурсов, содержащий строки, специфичные для ваших типов buildTypes. Похоже, у вас может быть пользовательский qa
buildType. Если это не так, игнорируйте часть qa ниже.
└── src
├── debug
│ └── res
│ └── buildtype_strings.xml
├── release
│ └── res
│ └── buildtype_strings.xml
└── qa
└── res
└── buildtype_strings.xml
Ответ 6
Нам нужно решение для поддержки имени приложения с локализацией (для нескольких языков).
Я протестировал с помощью решения @Nick Unuchek, но здание потерпело неудачу (не найдено @string/). немного изменить, чтобы исправить эту ошибку:
Файл 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>
Ответ 7
Для более динамичного решения на основе gradle (например, установите базовое имя приложения в главном strings.xml
один раз и не повторяйте себя в каждой комбинации типа вкуса/сборки strings.xml
), см. мой ответ здесь: fooobar.com/questions/94769/...
Ответ 8
Вы можете использовать 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\
. Замените "Имя вашего приложения" в файлах отладки и выпуска. Удалите элемент app_name
из strings.xml
в папке app\src\main\res\values\
.
В AndroidManifest
вас будет то же самое
<application
android:label="@string/app_name"
...
Без изменений вообще. Даже если вы добавили в него библиотеку AndroidManifest
файл strings.xml
.
Ответ 9
Поскольку автор просит сделать это в 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"
}
}
}