Подготовка графических ассетов под Android (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi)
Система плотностей пикселей Android — один из ключевых источников визуальных артефактов в готовых приложениях. Размытые иконки на флагманах, пиксельные края на бюджетных телефонах, неправильные размеры в разных папках — всё это следствие неправильной подготовки ассетов.
Плотности и коэффициенты
Android делит экраны на density buckets с базовым коэффициентом mdpi = 1×:
| Density | Коэффициент | Типичные устройства |
|---|---|---|
| mdpi | 1× (160 dpi) | Старые бюджетные устройства |
| hdpi | 1.5× (240 dpi) | Бюджетный сегмент |
| xhdpi | 2× (320 dpi) | Средний класс |
| xxhdpi | 3× (480 dpi) | Большинство флагманов |
| xxxhdpi | 4× (640 dpi) | Pixel 8 Pro, Galaxy S24 Ultra |
Базовый размер в dp указывается один раз. Физический пиксель на xxhdpi = dp × 3. Иконка 24dp = 24px в mdpi, 48px в hdpi, 72px в xhdpi, 96px в xxhdpi, 128px в xxxhdpi.
Векторные vs растровые ассеты
Простые иконки, пиктограммы, UI-элементы без фотографических деталей — всегда VectorDrawable (SVG-подобный XML формат Android). Один файл, любая плотность, нет размытия. Ограничение: не поддерживает сложные эффекты (blur, некоторые gradient types), анимированные иллюстрации требуют AnimatedVectorDrawable или Lottie.
Для PNG-ассетов (фотографии, сложные иллюстрации, рекламные баннеры) готовим для каждой density отдельно. Правило: рисуем в xxxhdpi (4×), масштабируем вниз. Масштабирование вверх всегда даёт потерю качества.
Типичные ошибки при экспорте
Нечёткие границы на xhdpi/xxhdpi. Дизайнер рисует иконку 24×24px и экспортирует напрямую без учёта плотностей. На xxhdpi система масштабирует 24px до 72px билинейной интерполяцией — размыто. Решение: рисовать в размере для наибольшей плотности.
Неправильная папка mipmap vs drawable. Иконки лаунчера — в mipmap-*. Все остальные ассеты — в drawable-*. Система обрабатывает mipmap иначе при масштабировании. Положить App Icon в drawable — иконка будет правильно отображаться, но потеряет оптимизацию для launcher.
Лишние папки. Нет смысла делать ldpi (0.75×) — устройства с такой плотностью практически не встречаются с 2014 года. xxxhdpi охватывает все текущие флагманы. Если проект не поддерживает устройства старше 2016 года, mdpi тоже можно опустить.
Имена файлов. Имена ресурсов в Android — только строчные буквы, цифры и подчёркивание. ic_Arrow_Right.png вызовет ошибку компиляции. ic_arrow_right.png — правильно.
Процесс подготовки
- Получаем от дизайнера SVG или PDF (векторный источник)
- Простые иконки → конвертируем в
VectorDrawableчерез Android Studio (File → New → Vector Asset → Local SVG) - Растровые ассеты → экспортируем из Figma с множителями 1×, 1.5×, 2×, 3×, 4× в соответствующие папки
- Проверяем имена на соответствие naming convention
- Оптимизируем PNG через
pngquantилиoptipngдля уменьшения размера APK
Что входит в работу
- Аудит текущих ассетов (если есть)
- Конвертация иконок в VectorDrawable
- Экспорт растровых ассетов в 5 плотностей
- Правильная структура папок mipmap и drawable
- Оптимизация размера файлов
- Готовый набор для вставки в Android Studio / передачи разработчику
Сроки
4 часа — 2 дня в зависимости от количества ассетов и необходимости конвертации в векторный формат. Стоимость рассчитывается индивидуально.







