Чем удобнее, тем объемнее
Главной причиной интенсивного использования ресурсов становится расширение функций программ: чаты, рекомендации, встроенные проигрыватели, инструменты на основе машинного обучения. При этом каждая новая опция требует не только основного кода, но и целого набора вспомогательных элементов.
Например, модуль обработки изображений подтягивает за собой библиотеки для сжатия, распознавания и отображения, а аналитические инструменты — компоненты для сбора данных. Новые элементы и команды включают резервные варианты для разных сценариев, инструменты отладки, чтобы приложение стабильно работало на всех возможных устройствах.
В итоге небольшое, но полезное улучшение приводит к заметному увеличению размера утилиты, а владельцы смартфонов испытывают неудобства: обновления расходуют мобильный трафик, приходится чаще освобождать память, удаляя ненужные приложения и файлы, или покупать гаджет с бо́льшим объемом ПЗУ.

Графика, языки и адаптация под экраны
Еще одна причина увеличения веса программ — их визуальная составляющая с качественными изображениями, анимацией, шрифтами, адаптированными под дисплеи разного размера и плотности пикселей.
Поддержка нескольких языков добавляет дополнительные наборы текстов и элементов интерфейса. Все это нужно заранее скомпилировать, чтобы ускорить загрузку приложения. Безусловно, это улучшает работу, но требует увеличенного места.
Кроссплатформенные решения
Вносят свой вклад и платформы, которые постоянно повышают требования к безопасности, поддержке новых процессоров и экранов. Приложения должны соответствовать каждой новинке Apple или Google, что вновь добавляет фреймворки (англ. framework — происходит от frame, каркас и work, работа) и системные компоненты.
Иногда разработчики сразу выбирают инструменты, позволяющие создавать версии для Android и iOS одновременно, что ускоряет разработку и снижает затраты на поддержку. Но такие фреймворки содержат набор общих компонентов, которые загружаются целиком, даже если используется только часть их возможностей.

Тестовые версии и фоновые процессы
Не только технологии способствуют росту объемов мобильного ПО. Часто его размер увеличивается из-за особенностей процесса разработки. Например, новые функции добавляют через флаги, чтобы протестировать их на части аудитории. Для этого старые экраны и код отключают, но не удаляют полностью, а очистить в последующем забывают или откладывают.
При этом основной объем памяти занимают не строки кода, а статические библиотеки, модели данных, текстуры и медиафайлы, которые остаются в пакете даже после изменений в логике. Это особенно часто встречается в крупных проектах, где во главу угла ставят скорость и регулярность обновлений.
Сюда же можно отнести аналитические и рекламные инструменты, которые тоже заметно увеличивают объем, хотя их работа происходит в фоновом режиме и не заметна обывателю.

Можно ли сдержать рост
Полностью остановить увеличение размеров вряд ли удастся — ожидания пользователей растут, а гаджеты становятся все производительнее. Но современные подходы к разработке и внедрению мобильного ПО помогают контролировать ситуацию.
Модульная архитектура может загружать тяжелые компоненты только при необходимости. Например, системы вроде Android App Bundles и аналогичных решений для iOS оставляют в базовой версии минимум, а дополнительные ресурсы скачиваются позже. Помогают уменьшить объем умное сжатие, общие системные библиотеки и отказ от дублирования.
Но все-таки многое зависит от разработчиков. Если они регулярно проводят аудит зависимостей и ресурсов, своевременно избавляются от ненужных библиотек и данных, а не только добавляют новое, то их приложения сохраняют размер в допустимых пределах.
