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) все будет не максимально красиво, зато на объеме графических файлов удалось неплохо сэкономить.

Что дальше?

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

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

  • Djem46

    Хитро. Коротко и ни о чём))

    FaceBook:
    App 75.64
    Data 370
    Cache 64.67
    Зачем, зачем и что он хранит в data?
    Если это картинки и прочие комментарии, то почему нельзя хранить их в кэш?
    Просто нельзя зайти в настройки и очистить data… прийдётся перелогиниваться. Да и после логина… эти 370 сразу же почти возвращаются… так что там и зачем?:)

  • ArtemV

    Спасибо за статью, познавателбно! Хотелось бы еще узнать, какие приложения из популярных выжирают батарейку, «будят» телефон. Список тот же +вибрь, ватсапп, 2gis, якарты.

  • Чешир Х

    Отлично, значит я как человек не зарегистрированный в соцсетях, еще и ресурсы своих гаджетов экономлю!!!
    Отлично))

  • ArtemV

    А времени сколько экономишь!

  • Mike Ivanov
  • Donkey IAIAIA

    Да, пожиратели батареи интереснее, чем пожиратели места. Но я бы начал с неотключаемых, по сути, гугло-аппов. Гугло-сервисы, Приложение Гугл, да и сама система Андроид. Как они ухитряются выжрать за день половину ёмкости батареи 2500 mah, если я от них ничего не прошу.

  • ArtemV

    чесскажу, на моем телефоне никак:) У меня и за ночь то уходит 1 процент заряда батареи.

  • Vadim Voronkov

    Ставил тут недавно FB Messenger, по настойчивой просьбе хорошего приятеля. Удобнее ему так, видите ли, в WhatApp/Telegram какие-то ощущения не те. Поставил. Приложения сразу заняло 115 Мб во внутренней памяти устройства, плюс почти сразу после входа в учетку натянуло/нагенерило 90+ Мб данных. Итого стало занимать 206 Мб. Переписывалка. Которой я еще толком и не пользуюсь. Снес в очередной раз к чертовой матери, но вот тоже было бы интересно понять, а чего там столько весит-то?

  • Vadim Voronkov

    И, кстати, насколько корректно в данном случае сравнение с приложением LiveJournal? В нем же функционала — кот наплакал. Фактически, только читать можно и комментарии писать. Там даже картинку из поста в память устройства сохранить невозможно, не говоря уже про просмотр видео внутри приложения. Про какие-то там эмодзи и все вот это вот там вообще не вспоминали при разработке.

  • Я же написал, что полноценно сравнивать нельзя, но с точки зрения подходов — почему бы и нет. Например, по отношению к графическим файлам.

  • Идея хорошая, спасибо. Но проблема в том, что тут «ковырянием» ничего не сделать. Это надо просто статистические наблюдения проводить. Причем еще в зависимости от оболочки: MIUI может просто выгрузить приложение, обрубив ему фоновую активность, Clean UI (TouchWiz) предложит пользователю перевести приложение в «спящий режим».

  • Vadim Voronkov

    Ну так в нем потому и нет графических файлов, что нет функционала, которому они были бы нужны 🙂 Хотя… могли бы догадаться рекламы натолкать, как один красный оператор.

  • >> Ну так в нем потому и нет графических файлов

    Есть же. Но они ограничены по плотности пикселей (а это очень важный для рассматриваемой темы подход, графика в 640 dpi «жрет» неслабо).

    >> Хотя… могли бы догадаться рекламы натолкать

    Именно так. Никаких баннеров и рекламных заставок. При том, что веб-версия сервиса — это засилье рекламы.

  • ArtemV

    Про MIUI понятно, там обрубается все, что плохо лежит. А что нужно — легко настраивается. За что им большое спасибо. А за MIUI 9 спасибо втройне. Очень, очень быстрая система.
    Может быть потестить на чистом и незамутненном андроиде?

  • >> Может быть потестить на чистом и незамутненном андроиде?

    Можно, конечно. Вопрос в целесообразности. Мне почему-то кажется, что если просуммировать всех покупателей Nexus + Pixel + Moto + Nokia, то их будет меньше, чем покупателей Xiaomi, не говоря уже про Samsung.

  • ArtemV

    Ну, во-первых, что ожидает пользователя в самом худшем случае (т.е. на чистом андроиде).
    Во-вторых, просто интересный материал. Ведь для 95 процентов народу (в том числе из посетителей МР) тоже абсолютно пофиг, весит вконтактик 15 метров или 30 и почему это происходит. Все равно скачают и поставят. Но почитать интересно.
    Ну, а в-третьих, еще и можно показать, как с этим со всем делом бороться.

  • GrishaTav

    Мне кажется, главная проблема не в размере приложений и даже не в объеме сохраняемых ими данных, а в частом отсутствии каких-то простых и понятных способов для экономии места, переноса данных на карту памяти и пр.
    Лично я уже устал бороться за каждый мегабайт и просто тупо купил телефон с памятью побольше.

  • Sunrise

    На плей маркете сейчас бесплатно раздают приложение для лицокниги Fella. Весит всего 3мб. Шустрое приложение в отличном от родного

  • Sunrise

    Якарты в фоне постоянно обращаются к геолокации, остальные все норм

  • Sunrise

    Ваше досье для АНБ)

  • Andy Light

    Неофициальный клиент ВК — Kate Mobile — 6 Мб. Разрабам из ВК есть чему поучиться.

  • Andrey

    Спасибо автору за развитие этой темы. Это достаточно злободневно.

    По Фейсбуку. Непонятно, зачем такой объем для локализации. Почему нельзя загружать только основные языки в системе. Вместо этого туда валятся, видимо, все подряд, включая те, которые никогда на конкретном аппарате не будут использованы. Может, это проблема Андроида в целом. Хорошо, если автор прояснит этот вопрос.

  • Andrey

    Понятное дело. Однако, это тупиковый путь. Если разработчика не ограничивать никак в этом смысле, то он может далеко зайти.

  • Стандартный способ, который рекомендует Google — зашивать локализацию в приложение. Чтобы работать со скачиваемыми файлами надо специально заморачиваться, что просто никто не хочет делать.

  • Andrey

    Кстати, да. Функционал приложения ЖЖ это нечто. Какие там эмодзи?! Это единственная программа в моем смартфоне, в которой даже перестаёт работать свайп при вводе! А при переходе по уведомлению, тупо попадаешь в шапку темы! И изволь там ищи свой пост во всей остальной мешанине сообщений! Оценка приложению — 0 (ноль). Элементарно необходимое не работает!

    При таком огромном распространении живого журнала, имеет такую убогую программу — удивительно. Ощущение, что разработку приложения отдали какому-то забытому богом НИИ, которому плевать на результат. Если бы не ещё больше ужасное браузерное решение (с учётом адского рекламного напора в мобильной версии веб-интерфейса), давно бы убил это приложение.

    Может кто подскажет сторонний клиент, чтоб перестать мучиться?

  • Andrey

    Интересует еще приложение Сбербанк. Однако, подозреваю, что там встроенный антивирус сжирает большой кусок. Ну и Хром. Великий и ужасный. Что можно кроме рекламы затолкать почти в 70мб(!), я не понимаю. Это же всего-лишь браузер!

  • Александр Шереметьев

    В связи с забитой памятью телефона, которому 1,5 года, пришлось останавливать и удалять обновления со встроенных приложений. Так вот, за полтора года объем приложений вырос в 4 (!!!) раза. При внешне мало изменившейся функциональности.

  • Нищеброд

    Не, хром хороший стал сейчас. Мне нравится его виджет закладок. Нравится скачивать страницы.

  • Andrey

    Я не про функционал, а про размер приложения. И ворочается он неспешно на вполне рабочем железе в отличии от многих других прог. Возможно, это связанные вещи. Если в Мой МТС рекламы набили под завязку, то что в браузер можно запихать на 70мб — не понимаю. Размер может быть связан с плохой оптимизацией приложения. Может автор сможет отчасти пролить свет на этот вопрос.

  • Vadim Voronkov

    > При таком огромном распространении живого журнала

    Да какое там уже распространение? Платформа тихо и планомерно загибается, топовые блогеры уходят или в другие сети, или вообще на standalone-блоги.

    > плевать на результат

    Администрации ЖЖ уже который год плевать на результат, очевидно же.

    > давно бы убил это приложение

    Зато можно быстренько на компактном устройстве просмотреть ленту без рекламы, это ли не сказка?

    > сторонний клиент, чтоб перестать мучиться

    Учитывая постоянно падающую популярность платформы, вряд ли кто-то будет всерьез что-то стоящее под нее разрабатывать. Вроде по BeBlogger неплохие отзывы, но сам не проверял.

  • Нищеброд

    Ну, может размер соответствует функционалу? В данном случае.

  • Vadim Voronkov

    > Приложение Гугл

    Оно прекрасно отключается.

    > Как они ухитряются выжрать за день половину ёмкости батареи 2500 mah, если я от них ничего не прошу

    Вы не просите, а ваши приложения просят. Пуш-уведомления, геолокация, синхронизация, фоновое обновление данных и все такое.

  • Vadim Voronkov

    Ставьте Lite, там все гораздо скромнее и без лишних наворотов. Выглядит, правда, как привет из 90-х, но работает и ресурсов ест мало, особенно если его в фоне прибивать.

  • Andrey

    Я в 2014 году не без интереса откопал в интернете т.н. android app performance report от разработчика антивируса AVG. Сейчас глянул — оказывается есть такое же прошлогоднее исследование.

    Гуглить по фразе «avg android app performance report». Первая же ссылка, после рекламной, дает искомое)

  • Andrey

    Понятно. Значит, я скорее по инерции считал, что ЖЖ в тренде. Оказывается, он загибается. Отсюда и убогое приложение.

  • Vadim Voronkov

    Какая у ресурса администрация, такое у него и приложение ))

  • goodhoopoe

    хотел бы добавить, что facebook на iOs еще печальнее. 237.4 MB последняя версия. вдумайтесь в цифру. и мессенджер еще 133.7 MB.
    и в противопоставление.
    VK. 26.2 MB
    одноклассники уже 73.8 MB

  • Andrey

    Все относительно. Начнем с того, что расход за ночь в большей степени относится к способности прошивки «усыплять» приложения. Во многом, зависит от типа «профиля» в котором функционирует прошивка. При этом, кому то может понадобится, чтобы даже когда смартфон лежал спящим, оповещения продолжали приходить. При таком подходе, ничего подобного «1%» добиться будет нельзя. Плюс, уровень сигнала базовой станции также приобретает «вес».

    При использовании добавляются дополнителшьные факторы.

    Наконец, величина «1%» ни о чем конкретном не говорит. Во-первых, зависит от полной емкости аккума — 1% для аккума 3000 и 4000 это, как вы понимаете, разные вещи. Далее, по причине того, что какому уровню разряда это соответствует, зависит целиком и полностью от интерпретации уровня заряда прошивкой, состоянием аккумулятора и от уровня заряда, на котором он находится (т.к. процесс разряда нелинейный).

  • Donkey IAIAIA

    Я тоже раньше отключал — и сервисы, и приложение. Потом включал сервисы, если надо было что-то из маркета загрузить. А на Йотафоне не могу. Один раз удалось остановить приложение, после этого оно отключилось, и все — телефон ушел в циклическую перезагрузку, пришлось сбрасывать к заводским настройкам из бут-меню.
    В любом случае, это странный выход, удалять на корню приложения с большой загрузкой, тем более если им нет достойной альтернативы. Интереснее было бы все же понять, какие именно подпроцессы сажают батарею, и по возможности ограничить это влияние настройками.

  • Andrey

    >Я тоже раньше отключал — и сервисы, и приложение. Потом
    включал сервисы, если надо было что-то из маркета загрузить.

    Одно лечим, другое — калечим. Сэкономили заряд аккума, зато теряем время, включая каждый раз нужные сервисы и отключая их после использования.

  • Vadim Voronkov

    Сервисы я не отключал никогда, а вот приложением не пользуюсь, поэтому всегда отключаю его со всеми остальными ненужными предустановками на любом устройстве сразу. Если хотеть ограничивать настройками, то надо в сторону оболочек с агрессивным энергосбережением смотреть, типа MIUI, EMUI и всего такого.

  • Хром смотрел, там почти все — бинарная библиотека Chromium. Ни рекламы, ни графики особо нет, само приложение на Java — небольшое.

  • Andrey

    Бинарная библиотека это т.н. «движок»? Вещь в себе, конечно, если так. Интересно, все браузеры такие тяжелые нынче? Других на Дроиде не юзаю просто. Хром нужен для полноценного использования в экосистеме Гугла.

  • Еще размер связан с тем, что нужно поддерживать обратную совместимость с предыдущими версиями ОС.

  • >> Бинарная библиотека это т.н. «движок»?

    Ага.

  • Andrey

    Т.е. написано и откомпилировано на каком-нибудь с++, для эффективного исполнения. На Яве пишется, интерфейс, если условно. Так вроде. А тормоза, видимо, часто происходят от неэффективного и громоздкого Ява-кода, который насовали в свои страницы не сильно разборчивые веб-дизигнеры?

  • Максим Терновский

    Плюсую, сам хочу слезть с этой гадости. С ВК уже разделался, а FB и инстаграмм приходится юзать по работе.

  • У фейсбука есть лайт версии для мессенджера и основного приложения.

  • Donkey IAIAIA

    Ну так и я о том, тупо отключать — выход, но слишком брутальный. Хотелось бы разобраться в вопросе и действовать более точечно.

  • Там несколько сложнее получается. Движок написан на C++ не только для эффективности, но и для кросс-платформенности (нативный код под любой ОС получается). На Java — вся обвязка сверху. По сути — да, интерфейс.

    Веб-разработчики пишут скрипты на JavaScript (который никакого отношения к Java не имеет).

  • А они будут расти и расти, потому что компании убеждены что без кнопочки над которой трудится 100 программистов и которую вы никогда и не увидите, вы просто от отчаяния перейдете к конкурентам.

  • ACP

    Андрей, спасибо за статью. По поводу вопроса «что дальше» — может быть немного больше разбирать приложения, хотя это наверное будет уже интересно только гикам или программистам… И так же интересно ещё и другое — механизм установки приложения в ОС. Сам дистрибутив того же ФБ весит допустим 70 мб, то это совсем не значит, что оно и в системе будет занимать 70 мб. После установки оно занимает уже >200-300мб. Не говоря уже о кэше.
    Ну и особенности установок софта так же интересны. Т.к. на тех же 7-ках и выше это перестало требовать столько процессорных и временных ресурсов, как было на прошлых версиях ОС. Установка почти моментально происходит.

  • bydloman

    Просто ЖЖ — настолько глючное, тормозное и убогое приложение, что его размер не имеет значения.

  • Vadim Voronkov

    Ну про основное приложение я знал, но что они еще и с мессенджером так, это для меня открытие. Это вообще гениальный подход: вместо одного нормального, шустрого, экономичного приложения запилить четыре недобитка, да еще из социалки выпилить функцию обмена сообщениями. Надеюсь, остальные с них пример брать не станут.

  • Djem46

    Кстати размер АПК (или что там скачивается, когда нажимаешь установить/обновить в плей стор) разный для разных версий андроида.
    Обновление хрома на 6.0.1 31мб, а на 7.0 19мб (или наоборот, запамятовал).

  • NetBUG

    Я вообще думал, что автор сделает netcat и разберёт объём и частоту передачи трафика, особенно при свёрнутом/не запущенном приложении (т.е. из служб приложения).

  • NetBUG

    В том числе поэтому юзаю Facebook Lite — мессенджер внутри. Не хватает только звонков 🙁

  • ACP

    Кстати! отличная идея!

  • Strickland

    Давайте и про ios такую же рубрику. Размер youtube/twitter вызывает полное недоумение. Это криворукие программисты или следствие особенностей ios?

  • Roman Sofronov

    Ответа на вопрос: Почему приложения такие большие? Так и не увидел.

  • Алексей Дорошевич

    Вот тоже весело:
    Яндекс диск на телефоне успел скушать 592 мегабайта под себя
    Гугл хромой — 210 мегабайт
    Фейсбук мессенджер — 158 мегабайт
    Сбербанк онлайн 125 мегабайт
    Проверить бы их на вшивость. С чего они такие толстые.

  • COOLAGA™

    А почему заголовок такого не грамотного содержания? Большие в плане габаритов или взрослые или все же размер в мегабайтах? Вы бы хоть кавычки поставили ))))). Компетентный типа ресурс ёмаё…

  • 00 00

    Так это кэш, его можно стереть в настройках.

  • Andrew Kartel

    На iOS Facebook весит 220мб, а VK — всего 15… тем более, что если найдутся люди, пользующиеся Facebook-messenger, то это отдельное приложение и тоже весит около 200мб…

  • Проблемы роста… В принципе это нормальное решение выпустить две версии если пользователю не нужна всякая загрузка видео и другие редко используемые вещи. К сожалению, андроид не позволят подгружать фичи по мере использования. Может мы и прийдем к этому однажды, вон гугл пилит свои микроприложения которые сами устанавливаются в браузере. Или однажды веб пожрёт всех мобильных разработчиков, остался всего год до момента когда веб получит очередной пиннок в этом направлении.

  • Поддержу всех возмущающихся. Где это фейсбук занимает 70 Мб? в магазине? может быть. у меня он занимает 347 Мб. при этом 272 Мб это данные, не Кэш, а именно «данные», которые не очистишь как тут советовали. Перенос на SD так же бесполезен. ну перенесли 74 Мб. самый же основной размер остался.

  • Anqrew

    Тут дело еще и в том, что любое обновление системных приложений сразу отжирает кучу места, когда приложение становится пользовательским (а системным его без рута не сделать). Те же сервисы Гугл Плей (+ Гугл аппсы) занимают совсем дикие объемы при сомнительной полезности

  • Vadim Voronkov

    Ну какого роста, там уж сколько лет роста особо нет или он достаточно плавный. Функционально приложения не растут быстрее конкурентов, однозначно. Как бы две версии — full и lite — еще ок. Но 4 приложения вместо 1 — уже перебор. Давайте уж тогда и веб-морду тоже на две части поделим, так логично будет.

  • >> Где это фейсбук занимает 70 Мб? в магазине?

    Вроде бы русским по-белому написано: APK-файл.

  • netnazgul

    Вроде бы нет… 🙂

  • Anton Morozov

    если общаешься через фб, а не только стену листаешь, то придется еще и мессенджер качать 🙁 и в тоже время есть fb lite который размером пару мегабайт и имеет практически весь функционал основного приложения и мессенжера… в общем странная политика

  • iVasya

    Платформа загибается, приложение развивать не собираются. С поддержкой приложения поначалу (много лет назад) пытался переписываться и жаловаться. Типичный диалог:
    — У вас в приложении гланды удалять очень неудобно
    — Ну вот смотрите, можно же через ж..у удалить, так что всё нормально
    — Ну неудобно же!
    — Удобно, пользуйтесь
    И вот я пользуюсь им… пока в ЖЖ остаётся пара-другая интересных мне блоггеров. Они уйдут, и я с облегчением удалю это поделие.

  • Andrew Kartel

    вот и я к тому же, мало того, что само приложение весит чёрт знает сколько, так ещё и мессенджер качать отдельно, который столько же весит… у ВК одно приложение, в котором сразу есть всё и оно весит всего 15мб…

  • Anton Chayka

    Хотелось бы узнать про клавиатуры. Почему клавиатура Samsung занимает 181 Мб в установленном виде? Это в то время, когда Gboard весит всего 54,86 Мб. Что тоже немало. Ладно бы данные пользователя были тяжёлыми, так нет, речь о самих клавиатурах.