Android Studio: каждому варианту присваивается свой значок

В Android Studio я хочу, чтобы у каждого варианта моего приложения была своя иконка.

Я пробовал разные способы, в том числе то, что предлагается здесь. Как предоставить разные значки приложений Android для разных типов сборки gradle? но это не работает

вот что я написал в файле build.graddle:

 flavorDimensions "marketplaceA"

    productFlavors {
        koanFlavor {
            dimension "marketplaceA"
            resValue "string", "app_name", "Koan"
            manifestPlaceholders = [
                    appIcon: "@mipmap/ic_launcher"
            ]
            minSdkVersion 20
            targetSdkVersion 27
            versionCode 3
            versionName '1.1'
        }
        koanSEFlavor {
            dimension "marketplaceA"
            resValue "string", "app_name", "Koan SE"
            manifestPlaceholders = [
                    appIcon: "@mipmap/ic_launcher"
            ]
            minSdkVersion 20
            targetSdkVersion 27
            versionCode 3
            versionName '1.1'
        }
        } 

И, так как я разделяю одно и то же разрешение в каждом варианте:

  • Я не делал res папку для каждого варианта

  • Я заполнил папку mipmapXXX основной папки res двумя версиями файлов xml и png

но значок не отображается, когда я запускаю приложение в эмуляторе (странно то, что оно отображается только на моем планшете Shield K1, на всех других пробных смартфонах, которые я пробовал, значок не отображается)

Обновить:

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

Может ли моя проблема исходить из моего launcher.xml?

<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@drawable/ic_launcher_background" />
    <foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

В Android Studio, когда вы открываете файл ic_launcher.xml, вы видите значок на вкладке previewx. Прямо сейчас я вижу только значок по умолчанию:S

Обновление II:

Дело в том, что я пошел за решение, где я поместил это в build.gradle для каждого варианта

    manifestPlaceholders = [
            appIcon: "@mipmap/ic_launcher"
    ]

а затем поместите 2 файла ic_launcher в папку по умолчанию. Я должен был добавить в манифест

 android:icon="${appIcon}"

Я думаю, что это плохое решение:(

Я сейчас пытаюсь найти решение @W0rmH0le, но что-то не так

Как избавиться от адаптивной иконки в пользу моей простой иконки?

ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ:

Советы от @W0rmH0le и @Derek действительно помогли, но вот информация, которая могла бы мне очень помочь в решении моей проблемы:

1) Новый интерфейс -> Image Asset UI в AS - единственный путь, и вы можете использовать его снова и снова, пытаясь добраться до нужного вам значка.

2) После того, как вы закончили работу с пользовательским интерфейсом Image Asset, выполните "Build -> Clean Project" и "Build -> Rebuild Project"

3) На этом этапе вам лучше использовать adaptive-icon, поскольку системы, на которых будет работать ваше приложение, могут превратить ваш значок в нечто уродливое, если вы этого не сделаете.

4) Поскольку вы используете Adaptive-Icon, не пытайтесь использовать фон с прозрачностью. Интерфейс Image Asset UI отобразит это красиво, но прозрачность не поддерживается в адаптивном фоне значка

5) Наконец, чтобы получить 2 версии значков, я добавил один значок в обычный процесс и пошел в проводник, чтобы скопировать папки mipmapXXX в безопасное место. Затем я добавил другую иконку в обычный путь. Чтобы закончить, я вставил сохраненные папки mipmap в дерево папок variante, как упомянуто @W0rmH0le

2 ответа

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

Например:

\src
  | 
  | -- \main
  |      |
  |      | --- \res -> Here, you place all default and common icons
  |
  | -- \koanFlavor
  |      |
  |      | --- \res -> Add only the icons that are different from default one
  | 
  | -- \koanSEFlavor 
  |      |
  |      | --- \res -> If you have one icon that are different from main and koanFlavor, you can place here

Замечание: эти значки разные, но они должны иметь одно и то же имя.

Вам не нужно создавать одну папку для каждого аромата... Даже если у вас есть 2 аромата, вам не нужно создавать 2 дополнительные папки (koanFlavor а также koanSEFlavor). Вы можете разместить все иконки одного аромата в главной папке. Таким образом, вам просто нужно создать одну дополнительную папку для поддержки другого варианта.

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

РЕДАКТИРОВАТЬ

Ваш значок определяется через Gradle по адресу:

manifestPlaceholders = [
        appIcon: "@mipmap/ic_launcher"
]

Это ic_laucher это значок, который будет использоваться в качестве значка запуска. Так, ic_launcher.png это значок, который вы должны переместить в определенные папки

Нашел простой способ сделать это

  1. Добавьте нужные изображения в app->src->main->res во всех доступных для рисования папках, в этом примере изображения называются x_launcher и y_launcher.

  2. Если, например, у вас есть потоковые ароматы внутри вашего файла app- > build.gradle

      productFlavors {
    xFlavor {
        dimension "default"
        signingConfig signingConfigs.release
        manifestPlaceholders = [
                appIcon: "@mipmap/x_launcher",
        ]
    }
    yFlavor {
        dimension "default"
        signingConfig signingConfigs.release
        manifestPlaceholders = [
                appIcon: "@mipmap/y_launcher",
        ]
    }
}

Затем вам нужно изменить строку app->src->main->AndroidManifest.xmlandroid:icon="@mipmap/ic_launcher"кandroid:icon="${appIcon}"

Другие вопросы по тегам