22 октября 2017

Почему приложения такие большие

Идея материалов этого цикла появилась после того, как меня попросили проанализировать приложение «Мой МТС». Приложение вроде бы не очень сложное, а объем вызывал искреннее недоумение. Основным потребителем места тогда оказалась банальная реклама – в виде изображений и видео. Но случаи, как известно, бывают разные. Поэтому посмотрим, что еще может занимать драгоценные мегабайты внутри 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 раза.

Что дальше?

Я планирую сделать несколько выпусков в этой рубрике. И в каждом выпуске рассматривать несколько приложений (либо от одного производителя, либо одной тематики) и рассказывать, чем в каждом конкретном случае обусловлен большой объем приложений.

Читайте также