Значок устаревшего изображения не отображается при использовании адаптивного значка

Я просто конвертировал значок своего приложения для совместимости с анимированными значками android o с помощью Image Asset Studio в студии Android.

когда я запускаю свой проект сейчас на своем устройстве, использующем API 25 Я получаю значок зеленого андроида по умолчанию, а не мой значок.

это мой манифест

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:allowBackup="false"
    android:roundIcon="@mipmap/ic_launcher_round"
    tools:replace="allowBackup"
    tools:ignore="GoogleAppIndexingWarning">

и это файлы, созданные созданной студией изображений

введите описание изображения здесь

Является ли это просто ошибкой Android Studio или мне что-то не хватает?

Ответ 1

У меня была такая же проблема, и я решил ее переименовать в каталог mipmap-anydpi на mipmap-anydpi-v26.

По-видимому, файл ic_launcher.xml смущает старые версии Android, и это скрывает его от всех, кроме O. Во всяком случае, мои значки теперь работают на всех версиях (по крайней мере, до SDK 11).

Ответ 2

Решение состоит в том, чтобы mipmap-anydpi-v26/ic_launcher.xml для адаптивных значков, применимых для уровня API 26 и выше, а также для других уровней API, поместить ic_launcher.png (Примечание: не ic_launcher.xml) во все папки mimpap.


Объяснение:

Здесь основная проблема mipmap-anydpi имеет приоритет над всеми другими mipmap-*. Поэтому, если ресурс найден в mipmap-anydpi, он всегда будет иметь преимущество. Теперь mipmap-anydpi-v26 - это фильтр над этим, который говорит, что ресурсы из mipmap-anydpi-v26 всегда будут выбираться независимо от плотности устройств , только если уровень API равен 26 или более (Oreo).

Теперь у вас есть android:icon="@mipmap/ic_launcher"

Если ваше устройство имеет уровень API 26 или выше, Android выберет mipmap-anydpi-v26/ic_launcher.xml, и все будет хорошо.

Проблема возникает, когда уровень API меньше 26. Статистика Android ищет ресурс с именем ic_launcher. Он никогда не пойдет и не выполнит поиск в mipmap-anydpi-v26 из-за ограничения уровня API. Затем он будет искать ресурс в mipmap-anydpi, а если его там нет, то фактический ресурс плотности, например. mipmap-mdpi.

Далее, вы не можете отдать ic_launcher.xml на устройства с Android меньше SDK 26, потому что он не знает, что такое адаптивные значки.

Поэтому решение состоит в том, чтобы mipmap-anydpi-v26/ic_launcher.xml для адаптивных значков, применимых для уровня API 26 и выше, а также для других уровней API, поместить ic_launcher.png (Примечание: не ic_launcher.xml) во все папки mimpap.

Ответ 3

Я столкнулся с той же проблемой и решил, как показано ниже.

Поместите ваши ic_launcher.xml и ic_launcher_round.xml в mipmap-anydpi-v26 (убедитесь, что у вас не должно быть ic_launcher.png/jpg или ic_launcher_round.png/jpg в одной папке).

Поместите ваш ic_launcher.png в mipmap-hdpi/mdpi/xhdpi/xxhdpi/xxxhdpi (убедитесь, что в этих же папках не должно быть ic_launcher.xml и ic_launcher_round.xml).

Делая это, вы не получите никаких ошибок при создании/запуске проекта.

Надеюсь, это поможет кому-то, кто такой же вопрос...

Ответ 4

Если все еще не работает, проверьте свою XML-схему, если вы используете автоматический импорт из Android Studio, он не будет работать, это должен быть /apk/res/android. Вот код:

<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
  <background android:drawable="@mipmap/ic_launcher_background"/>
  <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>