Адаптивные иконки в UE4 проекте на Андроид
В Android 8.0 Oreo (API 26) добавлена поддержка адаптивных иконок, которые могут отображать разные формы иконок для разных моделей устройств. Поскольку все больше устройств получают эти обновления, возникает все большая необходимость в дополнительных формах по-умолчанию. В итоге, уже существующие иконки могут некорректно отображаться. Чтобы убедиться в обратном, понадобится добавить в проект адаптивные иконки. К счастью, это довольно простой процесс, не требующий изменений в SDK для работы.
Вот, что нужно знать:
Типы иконок
На картинке ниже можно увидеть, как выглядит адаптивная иконка с разными формами по усмотрению пользователя.
Создание адаптивной иконки
Проще всего использовать для адаптивных иконок растровое изображение. Начните с нового PNG 108х108 снаружи и 72х72 внутри, содержащего картинку, чтобы убедиться, что она корректно отображается. Сохраняя файл, убедитесь, что он называется icon_bg.png.
Расположение адаптивной иконки
Как только создали иконку, поместите ее в папке проекта UE4: Build/Android/res/drawable.
Теперь новая иконка точно будет включена в проект для Android устройств.
Регистрация адаптивной иконки
Теперь необходимо создать XML-файл ресурсов иконки. Сначала создайте новую папку drawable-anydpi-v26 внутри Build/Android/res. Создайте новый XML-файл, назовите его icon.xml и добавьте к содержимому следующие строки:
<!--?xml version="1.0" encoding="utf-8"?--> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <background android:drawable="@drawable/icon_bg"> </background></adaptive-icon>
Можно создать более сложную иконку, но это самый быстрый способ с наилучшей совместимостью. Обратитесь к руководству по адаптивным иконкам для больших деталей, используя накладываемые изображения и векторные формы.
Использование круглых иконок
Также можно осуществлять поддержку иконок Круглой формы (на некоторых новых Андроид устройствах это иконки по-умолчанию). Это требует дополнений к AndroidManifest.xml, что можно легко сделать при помощи Unreal Plugin Language, но учтите, что понадобится код проекта. Можно преобразовать любой Blueprint проект в код, просто добавив пустой класс.
Во-первых, создайте еще один 108х108 PNG под названием icon_round.png и скопируйте в папку UE4 проекта: Build/Android/res/drawable. Теперь понадобится указать другой XML-файл ресурсов иконки в AndroidManifest.xml. В папке Build/Android/res/drawable-any-dpi-v26 создайте новый XML-файл под названием icon_round.xml и добавьте следующее:
<!--?xml version="1.0" encoding="utf-8"?--> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <background android:drawable="@drawable/icon_round_bg"> </background></adaptive-icon>
Следующий UPL-файл должен называться AddRoundIcon_UPL.xml и находиться в исходной директории проекта, где расположен файл Build.cs. Папка обычно называется по имени проекта, так что если это — Match3.uproject, ищите в Source/Match3.
Вот содержимое для этого файла:
<!--?xml version="1.0" encoding="utf-8"?--> <root xmlns:android="http://schemas.android.com/apk/res/android"> <!-- init section is always evaluated once per architecture --> <init> </init> <androidmanifestupdates> <!-- add roundIcon attribute to application --> <addattribute name="”android:roundIcon”" tag="”application”" value="”@drawable/icon_round”/"> </addattribute></androidmanifestupdates> </root>
Наконец, требуется зарегистрировать UPL файл, добавляя к Buil.cs проекта (Source/Match3/Match3.Build.cs как показано выше). Добавьте к файлу:
if (Target.Platform == UnrealTargetPlatform.Android) { // Add UPL to add configrules.txt to our APK string PluginPath = Utils.MakePathRelativeTo(ModuleDirectory, Target.RelativeEnginePath); AdditionalPropertiesForReceipt.Add("AndroidPlugin", System.IO.Path.Combine(PluginPath, "AddRoundIcon_UPL.xml")); }
По завершении, можно упаковывать билд UE4 проекта для Android. Иконки можно будет увидеть, когда проект появится на устройстве.