Страницы

Поиск по вопросам

пятница, 19 апреля 2019 г.

Удаление drawable-ресурсов

Когда происходит удаление drawable-ресурсов (when packaging an APK - при сборке APK или при установке APK на конкретное устройство?) и почему mipmap-ресурсы при этом не удаляются?
while drawable resources might be removed when packaging an APK, such as for the Gradle for Android split system for making density-specific editions of an app, mipmap resources are left alone, apparently
P.S. И что значит "Android split system"?


Ответ

Когда происходит удаление drawable-ресурсов (when packaging an APK - при сборке APK или при установке APK на конкретное устройство?)
Удаление ресурсов происходит на этапе сборки проекта (ведь цель этого – уменьшить размер APK). Исключить ресурсы можно с помощью оператора exclude, например:
exclude "ldpi", "xxhdpi", "xxxhdpi"
и почему mipmap-ресурсы при этом не удаляются?
В этом и есть вся фишка mipmap-ресурсов. Далее процитирую свой ответ
Зачем нужен mipmap? Для корректного отображения изображений на дисплеях с различными DPI в Android были введены квалификаторы (например, mdpi, hdpi). Чтобы изображения корректно выглядели на всех устройствах, необходимо разместить эти изображения со всеми доступными квалификаторами (в соответствующих разрешениях). Размещение изображений в различных разрешениях влечет за собой увеличение размера приложения. Допустим, Вы знаете, что у Боба такое-то значение DPI, а у Алисы – некоторое другое. Чтобы уменьшить размер приложения, Вы можете отдельно собрать приложение для Боба и отдельно для Алисы, включая изображения только в необходимом разрешении. При сборке проекта Вы можете исключить ненужные изображения (с помощью соответствующей конфигурации Gradle), например:
exclude "ldpi", "xxhdpi", "xxxhdpi" Вроде бы все хорошо: исключены ненужные изображения и размер приложения уменьшен. Однако не все так гладко. Некоторые изображения могут быть отображены в разрешениях, которые не соответствуют тому, в котором Вы оставили эти изображения в проекте. Пример – иконка приложения, в некоторых лаунчерах она может быть увеличена. Так как иконка приложения у Вас в единственном разрешении (как и все другие изображения), то она будет увеличена и произойдет т.н. пикселизация – изображение будут размыто (при большом апскейле будут заметны квадратики). Вот тут-то и приходит на помощь mipmap – изображения, размещенные там, не будут исключены. То есть если Вы укажите в Gradle:
exclude "ldpi", "xxhdpi", "xxxhdpi" то соответствующие изображения из drawable будут исключены, а из mipmap – нет.

Android split system – условное название совокупности конструкций, которые используется для разделения ресурсов для APK.

Комментариев нет:

Отправить комментарий