14 ноября 2017

Почему приложения такие большие №1: Социальные сети

В материале, открывавшем рубрику, меня просили рассказать о приложении Facebook. Поэтому в первом выпуске рубрики о нем и пойдет речь. И, конечно, говоря о Facebook, нельзя не рассмотреть основных его конкурентов у нас — «ВКонтакте» и «Одноклассники».

Facebook

Приложение занимает почти 70 мегабайт. Основной проблемой для анализа является обфускация. Частично может помочь найденная в сети информация (о правильной структуре пакета и о некоторых других внутренностях). Конечно, хотелось бы получить полную деобфускацию, но просто так это не сделать (например, деобфускатор deguard работает только с пакетами до 16 МБ). Однако поскольку нас не интересуют тонкости, а хочется получить только оценку в общем и целом, то основную информацию может дать даже анализ обфусцированного пакета. Итак, основные «пожиратели мегабайт»:

  • Само приложение + библиотеки на java — 26,1 Мб;
  • Набор скриптов на JavaScript (обфусцированный Fb4aBundle.js) — 19 Мб:
  • Бинарные библиотеки — 8,9 Мб;
  • Файлы локализации — порядка 13 Мб;
  • Графика — порядка 5 Мб.

ВКонтакте

Здесь, в отличие от Facebook, все намного проще. Приложение не обфусцировано, поэтому можно спокойно смотреть, куда тратится весь 31 мегабайт пакета.

Этот объем в основном приходится на следующие компоненты:

  • Бинарные библиотеки — 15,6 Мб (из них 9,7 Мб — своя библиотека и 4,8 Мб — ffmpeg — стандартная библиотека для работы с видео).
  • Эмодзи — 6,4 Мб (хранятся отдельно от стандартной графики в нескольких размерах);
  • Шрифты — 485 Кб;
  • Графика под разные плотности пикселей — около 6 МБ (здесь есть разные изображения, начиная от иконок и заканчивая баннерами);
  • Собственно приложение + библиотеки на Java — 6,6 Мб.

В итоге ничего особо криминального у VK нет. Хотя сэкономить несколько мегабайт на картинках (эмодзи, баннерах и т.д.) вполне можно было бы.

Одноклассники

Приложение занимает примерно столько же, сколько и VK — 33,5 Мб.

Поэтому интересно будет сравнить эти два приложения. Итак, что же здесь «под капотом»:

  • Графика — более 10 МБ (включая эмодзи и баннеры, которые занимают примерно 4,3 МБ);
  • Бинарные библиотеки — 5,3 МБ (включая библиотеки для работы с видео — 4 МБ);
  • Приложение + библиотеки на Java — 22,8 Мб;

Как и в случае с VK, можно было бы сократить объем приложения за счет графики. Но и само приложение «Одноклассники» построено неоптимально. Например, здесь используются сразу две библиотеки для асинхронной работы — Reactive (RxJava) и Bolts.

LiveJournal, или не все так плохо

Может сложиться впечатление, что абсолютно все приложения для социальных сетей написаны из рук вон плохо неоптимально. Но это не так. Возьмем для примера LiveJournal. Конечно, это не социальная сеть, а скорее блоги с элементами социальной сети, но для иллюстрации оптимальности размера приложения ЖЖ вполне можно рассмотреть.

Как видим, здесь всего один файл *.dex, что говорит о небольшом размере самого приложения и библиотек на Java. Но что еще интереснее — это подход к графике. Здесь нет никаких громоздких баннеров на сотни килобайт. Более того, графика сделана для плотности пикселей не более чем 480 dpi.

Это означает, что на аппаратах с программной плотностью пикселей (подробнее про это см. в статье «Почему большие устройства на самом деле маленькие») 640 dpi (например, LG G3/G4) все будет не максимально красиво, зато на объеме графических файлов удалось неплохо сэкономить.

Что дальше?

Пишите в комментариях, об объеме каких приложений вам бы еще хотелось узнать.

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