Подтвердить что ты не робот

Как изменить имя приложения на <тип сборки> w140>

Я пытаюсь найти способ изменить имя приложения приложения для каждого типа сборки в gradle.

Например, я хотел бы, чтобы версия отладки имела <APP_NAME>-debug и версию qa <APP-NAME>-QA.

Я знаком с:

debug {
        applicationIdSuffix '.debug'
        versionNameSuffix '-DEBUG'
}

Однако я не могу найти команду gradle, чтобы применить изменение приложения, когда оно находится в панели запуска.

4b9b3361

Ответ 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"
        }
    }
}