Почему приложения много весят
Идея материалов этого цикла появилась после того, как меня попросили проанализировать приложение «Мой МТС». Приложение вроде бы не очень сложное, а объем вызывал искреннее недоумение. Основным потребителем места тогда оказалась банальная реклама – в виде изображений и видео. Но случаи, как известно, бывают разные. Поэтому посмотрим, что еще может занимать драгоценные мегабайты внутри apk-файлов.
Как получить APK
Как ни банально звучит, но для этого его необходимо скачать. Например, установить приложение из Google Play. Но после этого потребуется получить установленный APK. Самый простой способ для этого – файловый менеджер (например, ES Проводник) или другая утилита, умеющая передавать установленные приложения (например, ShareIT).
Но если хочется странного, то можно скопировать APK через TWRP или даже попробовать скачать APK через плагин к браузеру. При этом важно удостовериться, что архитектура пакета будет ARM, а не x86 (хотя, если интересен анализ пакета для x86, то наоборот – эта архитектура и нужна).
Как смотреть
APK представляет собой zip-файл, его можно просто переименовать и распаковать. Или воспользоваться инструментом «Analyze APK» из Android Studio. В этом случае сразу будет виден размер папок, и можно будет понять, что стоит детально проанализировать, а на что можно не обращать внимания.
Что значат папки
- assets и res/raw – бинарные ресурсы (там может быть что угодно, что для приложения выглядит просто как некий произвольный «файл»).
- lib – нативные библиотеки (на С++), скомпилированные для определенной архитектуры (ARM, x86).
- res/drawable* и res/mipmap* – изображения . Если в имени папки присутствует *dpi, то это изображения для указанного dpi (подробнее о dpi см. в статье «Почему большие устройства на самом деле маленькие»).
- res/layout – схемы экранов.
- classes.dex – скомпилированное приложение вместе с библиотеками на Java.
Конечно, в APK можно найти еще много разных файлов (а в папке res – много разных типов ресурсов), но основные здесь перечислены.
«Пожиратели» мегабайт
В случае с приложением «Мой МТС» все оказалось просто: больше всего объема уходит на банальную рекламу в виде картинок и видео.
Но бывают и другие «пожиратели» мегабайт:
- Внутренние справочники тех или иных данных. В том же приложении «Мой МТС» справочник тарифов занимает 4,6 Мб.
- Библиотеки. Например, разработчик приложения решил подключить для чатов библиотеку Hyphenate. И не посмотрел, что по умолчанию предлагается вариант с кодеками для голосовых звонков и видеовызовов. В итоге приложение получает в нагрузку несколько десятков мегабайт.
- Графика. Однажды я помогал дизайнеру участвовать в конкурсе компании Samsung. Разрабатываемое приложение представляло собой офлайн-справочник, довольно простой с точки зрения разработки (немного анимаций да простое перелистывание страниц), но очень насыщенный графикой. Было нарисовано больше сотни изображений в разрешении QHD. После одной из промежуточных версий (включавшей в себя далеко не все изображения) стало понятно, что приложение получается слишком большим. И было принято решение ограничить графику разрешением HD. Оценка результата на целевом планшете (Galaxy Tab S) дизайнера устроила, а объем при этом был уменьшен почти в 4 раза.
Что дальше?
Я планирую сделать несколько выпусков в этой рубрике. И в каждом выпуске рассматривать несколько приложений (либо от одного производителя, либо одной тематики) и рассказывать, чем в каждом конкретном случае обусловлен большой объем приложений.
В этом руководстве мы подскажем, что делать, если вы оказались в такой ситуации, а также как действовать, чтобы предотвратить её. Ведь очень полезно подумать о некотором свободном количестве ГБ в памяти смартфона задолго до того, как телефон начнёт хуже работать из-за нехватки места.
Зачем свободное место на смартфоне?
Даже если в вашем смартфоне достаточно памяти для файлов, всегда полезно навести порядок на вашем устройстве и заранее предотвратить ситуацию, в которой будет очень мало места.
Это позволит нам защитить себя от выбора того, какие важные файлы нужно срочно удалить, потому что, например, нужно прямо сейчас установить новую программу. Кроме того, устройство, у которого до предела забита внутренняя память, может иметь некоторые проблемы при повседневном использовании. Сохранение нескольких ГБ полностью свободного места определенно не повредит нашему телефону и может составить определенное буферное пространство.
Проблема недостатка внутренней памяти в телефоне сегодня встречается реже, чем несколько лет назад. Производители устанавливают в свои устройства всё больше и больше памяти, чтобы идти в ногу с рыночными изменениями. Многие модели смартфонов также доступны в нескольких вариантах памяти, и покупатель может выбрать то, что ему нужно. Однако, предположим, что у нас смартфон с объемом памяти, которой не хватает для наших нужд. Что делать? Обсудим два случая.
Я купил смартфон с небольшим объемом внутренней памяти и боюсь, что место скоро закончиться – как этого избежать?
У некоторых людей на телефоне много памяти, но они знают, что это может измениться в будущем. Так обстоит дело, например, с людьми, которые недавно купили смартфон более дешевой версии, ещё не загрузили слишком много файлов, но уже осознали, что некоторые вещи занимают больше места, чем они думали.
Вот наши советы, что делать в этой ситуации:
- Рассмотрите возможность использования потоковых сервисов . Вы хотите перенести всю фонотеку со старого устройства на новый смартфон? Подумайте, действительно ли это необходимо и не лучше ли, например, использовать Яндекс.Музыку. Конечно, чтобы в полной мере использовать потенциал такой услуги, вам придётся оплачивать ежемесячную подписку. Но подумайте, сколько времени вы сэкономите на загрузке песен, выравнивании их громкости, возможной обрезке и сортировке в плейлистах. С приложением для потоковой передачи музыки вы сэкономите время и откроете для себя новые песни, которые будут вам предложены. Плюс вы получите много свободного места на телефоне. Ещё актуальнее эта ситуация для фильмов и сериалов – видеофайлы занимают в несколько раз больше места, чем музыка.
- Заархивируйте несколько файлов в виртуальном пространстве . Вы делаете много фото и видео, но потом редко к ним возвращаетесь? Хорошей идеей будет сохранить материалы, например, на Яндекс.Диск и удалить их из памяти устройства. При необходимости вы всегда можете быстро просмотреть фильм, фото или другой документ, а также загрузить его на свой смартфон. Всё, что вам нужно, это подключение к Интернету.
- Купите карту microSD, если ваш телефон поддерживает её . Лично я не являюсь энтузиастом карт памяти в смартфоне, потому что расширение памяти таким способом не полностью компенсирует то, что даёт больший объем встроенной памяти телефона. Другими словами, лучше иметь смартфон с 64 ГБ встроенной памяти, чем телефон с 32 ГБ встроенной памяти вместе с картой памяти на 32 ГБ. Однако, если у вас уже есть смартфон с меньшим объемом встроенной памяти, карта будет полезна. Вы можете сохранить на ней некоторые файлы, которые, например, не хотите передавать в облако. С приложениями дело обстоит сложнее. Даже если мы установим программу на карту, часть её будет сохранена во встроенной памяти. Если вы решили купить карту памяти, при покупке стоит обратить внимание на её класс. От этого будет зависеть скорость записи данных.
Если нам не хватает места на смартфоне, мы попадаете в гораздо более сложную ситуацию. Мы как бы стоим у края ямы и должны как-то не упасть в неё. Во-первых, мы можем применить методы из предыдущего абзаца, адаптируя их к нашей индивидуальной ситуации. Однако, на этом спектр возможностей не заканчивается.
- Удалите популярные социальные приложения и замените их версиями Lite . Популярные программы социальных сетей могут занимать много места. Вы не всегда можете увидеть это сразу после установки, потому что обновления и данные приложения делают свою работу позже. Если возможно, переключитесь на облегченные версии программ, которые вы используете, – это очень хороший способ сэкономить место. Однако, приходится считаться с немного упрощенным интерфейсом и ограниченным функционалом.
- Тщательно очистите свой телефон . Удалите повторяющиеся приложения. У вас есть несколько программ для записи нот или воспроизведения музыки? Оставьте только своё любимое приложение из каждой категории или то, которое. занимает меньше всего места. Кроме того, избавьтесь от тех программ, которыми вы не пользуетесь ежедневно. Систематизируйте свои документы, фотографии и другие файлы.
- Очистить кеш приложения . Эта опция доступна в настройках. Возможно, полученное таким образом количество места не будет впечатляющим, но это всегда что-то.
- Очистите данные приложения . По сути, это лучшее оружие. Данные приложения могут занимать в несколько раз больше места, чем сама программа. Например, размер приложения YouTube на моём устройстве составляет 137 МБ. Однако, пользовательские данные в той же программе заниманию 618 МБ. Итак, если очистка данных приложения может быть настолько эффективной, почему это последнее средство? Во-первых, ничто не вечно, и постепенно ваши пользовательские данные будут восстанавливаться. Вероятно, через некоторое время они вернутся в прежнее состояние. Вторая причина – вы можете избавиться от данных, которые могут быть важны с точки зрения нашего использования приложения. Например, после очистки данных социального приложения нам придётся снова войти в него. В случае игры мы можем потерять набранные очки / сохраненные игры.
Как получить больше места на смартфоне
При покупке нового телефона стоит выбрать устройство с достаточной памятью. Часто, заплатив совсем немного, мы можем даже удвоить количество ГБ.
При покупке смартфона следует обратить внимание на тип встроенной памяти. Память EMMC уступает памяти UFS – этот стандарт позволяет одновременно читать и записывать данные. Если мы выберем телефон с памятью UFS, мы можем предположить, что стандарт UFS 3.0 или 3.1 лучше, чем UFS 2.1.
Парадоксально: несмотря на развитие технологий и возросшие объёмы памяти смартфонов, на современный гаджет вы можете установить приложений меньше, чем несколько лет назад. Хватит это терпеть! Разбираемся в причинах и ищем методы борьбы с раздутыми программами.
Размер десяти самых популярных приложений на iOS за 5 лет вырос в 9 раз
Согласно статистике, собранной компанией Sensor Tower, пять лет назад набор из 10 наиболее популярных приложений для платформы iOS занимал всего 200 МБ. Сегодня они же весят уже больше 1,8 ГБ. Их аппетит вырос в невероятные девять раз, в то время как минимальный объём внутренней памяти новых iPhone — всего в четыре раза (с 16 до 64 ГБ). Программы увеличились по-разному: если Spotify «растолстела» всего в шесть раз, то Snapchat — в рекордные 51. И дело не только в гигабайтах. Разросшиеся приложения начинают тормозить. Почему так происходит? Есть несколько причин.
Причина 1. Метрики и трекинг
Казалось бы, новые функции — это всегда хорошо. Так и есть, когда речь идёт о новых возможностях для пользователей. Но с каждым днём в приложениях появляется всё больше кода, реализующего сомнительную функциональность. Любая программа для заказа бургеров отслеживает, сколько времени вы провели в том или ином разделе, сколько раз нажали на определённую кнопку, и даже записывает экран во время работы. За желание разработчиков знать о нас всё мы с вами расплачиваемся не только снижением приватности и мобильным трафиком, но и сокращением свободного места в памяти смартфона.
График времени, проведённого пользователем в разных разделах приложения, построенный на основе внутренних метрик
Причина 2. Лишние ресурсы
С предыдущим пунктом тесно связано дублирование ресурсов: в крупных фирмах над разными частями приложения трудятся разные люди, использующие одни и те же файлы для модулей. При подготовке релизных версий об этом просто-напросто забывают. Как результат — 40 МБ «избыточного веса» в клиенте Facebook. Компания время от времени чистит установочные пакеты от мусорных файлов, но эта музыка будет вечной, а батареек у них хватит надолго.
Внутренняя структура приложения Facebook в апреле 2017 года с указанием дублированных ресурсов
На удивление нерационально реализована работа с ресурсами в приложениях для iOS: в файлы программ (.ipa) попадают иконки сразу для всех устройств, начиная от iPod Touch и заканчивая iPad Pro. В то же время в Android принято добавлять всего один набор графики для всех аппаратов, который затем будет отмасштабирован для разных разрешений и размеров экранов. Чтобы улучшить ситуацию, Apple пару лет назад представила технологию App Thinning — она позволяет гаджетам скачивать только необходимый набор графики. Однако описанная ситуация нередко встречается и сейчас.
Сравнение размеров универсального приложения для iOS (серый столбец) и программ, собранных под конкретные устройства
Причина 3. Неоптимальный код
Существует распространённое выражение, известное во множестве вариаций: «железо стоит дешевле времени разработчика». К сожалению, это действительно так. Пользователь рано или поздно купит новый смартфон, куда установят ещё более мощный процессор и ещё больше памяти. Так зачем вкладывать усилия в качество кода, когда «и так схавают»?
Главный бич современной разработки прикладного ПО — сторонние повторно используемые подпрограммы и «костяки» приложений (библиотеки и фреймворки). Само собой, в них как в инструментах, облегчающих написание кода, нет ничего плохого. Но нередко бывает, что программа тянет библиотеку весом несколько мегабайт ради единственной функции. А если таких функций и, соответственно, библиотек много? Это разработчикам для iPhone хорошо — у них новые релизы iOS приходят разом на все аппараты, вышедшие за последние годы. А в Android актуальных версий системы всегда по нескольку штук, и приложения должны уметь работать со всем этим зоопарком. Код, обеспечивающий совместимость, отнюдь не добавляет программе «лёгкости».
Диаграмма распределения версий Android на конец октября 2018 года
В мире iOS тоже не всё гладко: переход на язык программирования Swift увеличил объём тех же программ в три-четыре раза. Виноваты не только внутренние особенности языка (большие типы данных по умолчанию, увеличенный размер стандартных библиотек, дополнительные тесты и проверки, попадающие в финальную версию). Сыграла злую шутку и лень разработчиков, которые не хотят задумываться о выборе правильных типов данных и других методах оптимизации.
Сравнение размеров шаблонных приложений для iOS на языках Swift и Objective-C
Причина 4. Бесполезные функции
Неприятная тенденция последних лет — появление огромного количества «велосипедов». Вместо стандартных возможностей, предоставляемых системой, разработчики добавляют такие же, но собственные — например, браузеры или фотогалереи. И если есть настройка «Открывать ссылки в браузере», то спрятана она далеко в меню. А стоит в каждый мессенджер встроить по веб-просмотрщику или камере — и никакой памяти в смартфоне не хватит.
Ещё один популярный тренд: производители стремятся сделать из программ комбайны и добавляют в них новые функции, которые почему-то считают очень полезными. Пользователи-то думают иначе: зачем, скажем, файловому менеджеру «ES Проводник» диспетчер задач, анализатор SD-карты и аудиоплеер? Или вот бенчмарк AnTuTu: он не только получил целый набор дополнительных тестов, которыми почти никто не пользуется, но ещё и надоедает виджетом в панели уведомлений, пока не отключишь его вручную.
Слева — «ES Проводник», справа — AnTuTu
Причина 5. Рост требований к приложениям
Технический прогресс стремителен. Уже свершился переход на 64-битные чипсеты, а рост разрешений экранов и не думает останавливаться — куда-то же нужно девать возросшие процессорные мощности? И если с переходом на архитектуры большей разрядности размер программ изменился единовременно и сравнительно немного, то дальнейшее увеличение ppi в смартфонах сделает приложения заметно крупнее. Проблема не возникла бы при рациональном использовании ресурсов, но это, как мы уже выяснили, не всегда бывает так.
Все размеры иконок, необходимые для поддержки iOS-устройств
Как усмирить разжиревшие приложения
Увы, мы не в силах заставить разработчиков писать качественный код и тратить время на оптимизацию. Однако пара способов увеличить объём свободной памяти всё-таки есть.
Перенос приложений на карту памяти. Если ваш смартфон оснащён специальным слотом, вы можете установить карточку microSD и использовать её для хранения программ. Процесс переноса приложений в Android не изменялся с незапамятных времён. Достаточно найти нужное в настройках и нажать кнопку «Перенести на карту памяти» или «Изменить место хранения» (в зависимости от модели гаджета).
Несмотря на то, что карты памяти бывают весьма вместительными, у способа есть ряд недостатков. Некоторые программы в принципе не могут быть перенесены (за это отвечают их создатели), а какие-то после переноса теряют часть функциональности или начинают работать нестабильно. Можно обойти ограничения, применив опцию объединения внутренней и внешней памяти в Android, но тогда не получится использовать карту в других устройствах, а её извлечение запросто лишит вас части установленных приложений.
Использование веб-версий. Изрядная часть привычных нам приложений — не более чем веб-клиенты сайтов. Сюда относятся среди прочего клиенты социальных сетей и приложения вроде YouTube. Понятно, что нативные программы обычно имеют большую функциональность. Но если вы готовы от неё отказаться (предположим, вам не нужны мгновенные уведомления из соцсети), то браузер станет вполне неплохим вариантом.
Использование облегчённых приложений. «Ожирение» некоторых программ уже настолько велико, что владельцы бюджетных смартфонов попросту не могут ими нормально пользоваться — не только из-за большого объёма, но и медленной работы. Поразительно, но многие разработчики решили не оптимизировать существующие программы, а сделать их облегчённые версии. Сначала речь шла только о собственных инициативах создателей (так появилось приложение Facebook Lite), но затем Google представила Android Go — сборку операционной системы для недорогих устройств. Помимо общей оптимизации Android Go открывает в Google Play доступ к облегчённым версиям более чем полусотни популярных программ как от самой Google, так и от сторонних компаний.
Google Maps Go почти не отличается от обычного приложения, но занимает в памяти смартфона считаные килобайты и использует Chrome в качестве движка
Если же на вашем гаджете установлена обычная версия Android, то загрузить Go-версии приложений можно вручную из apk-файлов. Найти их удастся, например, на нашем форуме.
И к чему тут тонна текста? Неужели неясно, что:
- игры могут делаться на движках. Они могут быть тяжеловесные и использовать нативный код, для которого в apk придётся дублировать библиотеки под разные архитектуры процессора: arm, arm64, x86, mips.
-большинство игр содержит много графики. О каких тогда килобайтах может быть речь?
- в Android-программах очень часто используется support-library, которая упрощает разработку под старые версии платформы. И минимальная её версия занимает около 2 Мб.
- в Android принято делать приложения и игры такими, чтобы был один apk для всех устройств. А значит в ресурсах может быть графика очень высокого разрешения, чтобы хорошо смотрелось на планшетах с большим экраном. При этом все картинки могут быть дублированы с другим разрешением, чтобы не было нагрузки при масштабировании у устройств с меньшим размером экрана.
Чаще всего высокий вес потому, что для создания игр на андроид используют сторонние инструменты, вроде Unity 3D, Game Maker и тд, никто больше не хочет писать на чистой андроид яве. Выведение строчки Hello World в таких билдах под ведро может занимать около 10 МБ (хз сколько еще после установки). Также на ведро иногда требуется учитывать несколько разрешений, держа в одном APK 2-3 сета графики и иконок. А учитывая кривые руки многих людей, они еще могут и забыть отключить при сборке разный бесполезный хлам, который даже не используется в приложении. Аналогичные проблемы и с iOS, но все на это забили. Да и вообще, основная цель современных мобильных девайсов - быстро устареть/засрать всю память, чтобы ты быстрее купил новый.
Я видел рантайм от 1С. 22 мб в архиве, даже хелворд. Чувак, с этим придется смирится, потому что девайсов много, добавляют либосы для разных версий чтоб не было несколько приложух и копипастинга кода. Чтоб ты знал, я в шоке с того, как андроид хранит прожки. Был по стандарту установлен офис, хотел удалить, но удалить нельзя было, только остановить. Ты останавливаешь эту прогу и вуаля 100-200 мб из памяти приложений как рукой сняло
чтобы был один apk для всех устройств Самая тупая идея.
Мы же не в блокноте код пишем, уж в Android Studio можно сделать плагинчик для сборки нескольких APK, под разные разрешения. Почему эта идея с j2me оказалась вдруг плохой?
Про разных вендоров понятно, но разрешение экранов стабильно.. Да и рантайм теперь не меняется от вендора к вендору (вспоминая Siemens API, Motorola API)..
У Apple, вроде, разные файлы, под iPhone и iPad, потому что видел некоторые программы в сторе, доступные только на паде.
Читайте также: