Как изменить имя приложения для каждого типа сборки Gradle



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



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



Я знаком с:



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


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

624   7  

7 ответов:

если под "имя приложения", вы имеете в виду android:label on <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-файл. Вы можете определить отдельный файл строковых ресурсов, содержащий строки, относящиеся к вашим типам зданий. Похоже, у вас может быть пользовательский qa buildType. Если это не так, игнорируйте часть 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

    Ничего не найдено.