Разработка
На 65% меньше APK и на 70% меньше потребление памяти: оптимизация приложения для Android — размер
Выполнив все вышеперечисленные действия и проведя незначительный рефакторинг кода приложения, мы успешно сократили размер APK с 20.5 до 8.3 МБ.
Мы работали над созданием MVP-продукта для нашего Android-приложения. После разработки MVP-продукта мы выявили необходимость оптимизации приложения для повышения производительности. Проведя анализ, мы обнаружили области для улучшения показателей приложения: использование памяти, размер APK, использование процессора и производительность пользовательского интерфейса. Приложение в значительной степени ориентировано на отображение высококачественных изображений большого размера, что приводит к высокому потреблению памяти и большому размеру APK.
Размер APK
Уменьшение размера APK является нашей основной задачей при оптимизации приложений. Это связано с тем, что большой размер APK может иметь значительные последствия:
Почему размер APK важен?
- Влияние на хранилище: Большие APK занимают больше места на устройстве пользователя, что может привести к проблемам, связанным с хранением данных. Пользователям может не хватить места для хранения других приложений или файлов.
- Использование памяти: APK большого размера может требовать больше памяти для загрузки и работы приложения. Такое увеличение объема памяти может привести к нагрузке на устройства с ограниченным объемом оперативной памяти и вызвать проблемы с производительностью.
Наша цель — повысить удобство работы и производительность приложения за счет уменьшения размера APK. Для выявления факторов, способствующих увеличению размера APK, мы воспользуемся программой APK Analyzer.
Что такое APK Analyzer
APK Analyzer — это инструмент, предоставляемый компанией Google для проверки содержимого пакетов приложений для Android (APK). APK Analyzer помогает разработчикам понять состав их APK-файлов, включая ресурсы, ассеты и код, из которых состоят их приложения для Android.
Перетащите APK в IDE Android Studio, чтобы просмотреть его компоненты.
Начальный размер APK составил ~ 20.6 МБ
1. Правила Proguard
Включив флаги minifyEnabled
и shrinkResources
и добавив правила ProGuard для устранения ошибок сборки, мы успешно уменьшили размер APK с примерно 20.5 МБ до 15.5 МБ. Это означает уменьшение размера APK на 25%.
Официальная документация: https://developer.android.com/build/shrink-code
Хотя нам удалось уменьшить размер APK на 25% с помощью примененных правил, из скриншота видно, что 77% размера по-прежнему занимают ресурсы. Это говорит о том, что возможности для уменьшения размера APK еще есть.
2. Png в Webp
Преобразование изображений PNG в Webp может привести к значительному уменьшению размера APK, часто на 60-70% за счет уменьшения размера ресурсов.
Важное замечание: Оптимизация WebP-ассетов с помощью процесса конвертирования в Android Studio гораздо эффективнее по сравнению с созданием оптимизированных изображений непосредственно в таких инструментах проектирования, как Figma или Zeplin. Результаты могут быть интересными с точки зрения уменьшения размера APK.
Выберите Webp-изображения -> щелкните правой кнопкой мыши -> конвертируйте в PNG
После преобразования в PNG теперь конвертируйте все эти изображения в webp.
Выберите изображения PNG -> щелкните правой кнопкой мыши -> конвертируйте в Webp
Такой подход значительно уменьшает размер APK.
3. Удаление неиспользуемых ресурсов
По мере увеличения объема проекта мы могли добавить множество неиспользуемых ресурсов. Удаление этих неиспользуемых ресурсов помогает уменьшить размер APK.
Перейдите к пункту «Refactor» в верхней части Android Studio, затем выберите «Remove Unused Resources». Это действие отобразит список ресурсов. Проверьте, используется ли каждый ресурс в вашем проекте, и перейдите к удалению ресурсов, которые не используются.
4. Добавление ResConfigs
Опция «resConfigs» позволяет контролировать, какие языковые или локальные ресурсы будут включены в APK-файл вашего приложения. Эта функция полезна для оптимизации размера приложения путем исключения ненужных ресурсов, связанных с определенными языками или конфигурациями.
Чтобы включить в APK только английские ресурсы и исключить ресурсы для других локалей, добавьте следующую строку в блок defaultConfig
файла build.gradle
приложения:
defaultConfig { // ... resConfigs("en") // ... }
Если ваше приложение поддерживает несколько языков, добавьте коды языков, как показано ниже.
defaultConfig { // ... resConfigs("en", "de-rDE") // ... }
5. Работа с ассетами приложения
Шаг 1. Для обеспечения плавного взаимодействия с пользователем мы включили в приложение высококачественные изображения, чтобы избежать медленной загрузки с внешних URL-адресов. Мы оптимизировали эту задачу, включив в APK 10 основных изображений, хотя в приложении в каждый момент времени отображается не более 5. Сократив количество изображений и объем хранения, мы повысили производительность приложения и избавились от неожиданных пустых экранов при загрузке изображений.
Шаг 2: В качестве заставки мы изначально использовали 8-секундный видеоролик размером около 2 МБ, который отображался только при первом запуске приложения. Для оптимизации размера приложения и удобства пользователей мы решили уменьшить размер видеоролика примерно до 800 КБ, что сделало его более эффективным для такого ограниченного использования.
6. Оптимизация шрифтов
Над дизайном различных функций работало несколько команд, каждая из которых использовала свои предпочтительные шрифты, такие как «Inter» и «Poppins». Использование нескольких файлов шрифтов .ttf увеличивает размер приложения. Чтобы уменьшить размер приложения, мы остановились на едином стиле шрифта для всего приложения, избавившись от лишних файлов шрифтов.
Однако если для вашего приложения требуется несколько стилей шрифтов, рассмотрите возможность использования загружаемых шрифтов. Такой подход позволяет избежать встраивания шрифтов непосредственно в приложение.
7. Пакеты приложений для Android (AAB)
Android App Bundles (AAB) — это эффективный формат упаковки приложений для Android по сравнению с традиционными APK. AAB содержат весь скомпилированный код, ресурсы и ассеты, необходимые для создания APK, но при этом они более оптимизированы. AAB настраиваются под конкретные конфигурации устройств, такие как размер экрана, язык и т.д. Когда пользователь загружает приложение из Google Play Store, магазин динамически генерирует собственный APK, включающий только те ресурсы и код, которые необходимы для конкретного устройства пользователя, что позволяет уменьшить размер загружаемого файла и оптимизировать работу пользователя.
Результат
Выполнив все вышеперечисленные действия и проведя незначительный рефакторинг кода приложения, мы успешно сократили размер APK с 20.5 до 8.3 МБ, что составляет впечатляющее снижение размера APK на ~60%.
В следующей статье мы рассмотрим оптимизацию памяти, в ходе которой нам удалось добиться заметного снижения использования памяти на 70%.