Как изменить имя приложения для каждого типа сборки Gradle
Я пытаюсь выяснить, как можно изменить имя приложения моего приложения для каждого типа сборки в gradle.
например, я хотел бы, чтобы отладочная версия имела <APP_NAME>-debug и версия qa, чтобы иметь <APP-NAME>-QA.
Я знаком с:
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
}
однако, я не могу найти команду gradle, чтобы применить изменение приложения, когда в пусковой установке.
7 ответов:
если под "имя приложения", вы имеете в виду
android:labelon<application>, самое простое решение-иметь эту точку в строковом ресурсе (например,android:label="@string/app_name"), а затем иметь другую версию этого строкового ресурса вsrc/debug/sourceset.вы можете видеть, что в этот пример проекта, где у меня есть замена
app_nameнаsrc/debug/res/values/strings.xml, который будет применяться дляdebugстроит.releaseсборки будут использовать версиюapp_nameнаsrc/main/.
вы можете использовать что-то вроде этого
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-файл.
убедитесь, что вы удалить функция app_name из values / folder (нет записи с этим именем).
вы можете сделать это с помощью 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.
для поддержки переводов сделайте следующее:
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. добавить в строки.значения 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>
имя приложения отображается пользователем, и именно поэтому Google рекомендует вам сохранить его в своих строках.XML-файл. Вы можете определить отдельный файл строковых ресурсов, содержащий строки, относящиеся к вашим типам зданий. Похоже, у вас может быть пользовательский
qabuildType. Если это не так, игнорируйте часть qa ниже.└── src ├── debug │ └── res │ └── buildtype_strings.xml ├── release │ └── res │ └── buildtype_strings.xml └── qa └── res └── buildtype_strings.xml
нам нужно решение для поддержки имени приложения с локализацией (для нескольких языков). Я протестировал решение @Nick Unuchek, но построение не удалось (не найдено @string/) . немного изменить, чтобы исправить эту ошибку: строить.файл 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 ] } }значения\строки.XML-код:
<resources> <string name="app_name_default">AAA prod</string> <string name="app_name_dev">AAA dev</string> </resources>values-en\strings.XML-код:
<resources> <string name="app_name_default">AAA prod en</string> <string name="app_name_dev">AAA dev en</string> </resources>Манифест.XML-код:
<application android:label="${applicationLabel}" > </application>
для более динамического решения на основе gradle (например, установите базовое имя приложения в main
strings.xmlодин раз, и избежать повторения себя в каждом вкусе / построить комбинацию типаstrings.xml), смотрите мой ответ здесь:https://stackoverflow.com/a/32220436/1128600
Comments