14 ноября 2017
Почему приложения такие большие №1: Социальные сети
Андрей Подкин
В материале, открывавшем рубрику, меня просили рассказать о приложении 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) все будет не максимально красиво, зато на объеме графических файлов удалось неплохо сэкономить.
Что дальше?
Пишите в комментариях, об объеме каких приложений вам бы еще хотелось узнать.
Хитро. Коротко и ни о чём))
FaceBook:
App 75.64
Data 370
Cache 64.67
Зачем, зачем и что он хранит в data?
Если это картинки и прочие комментарии, то почему нельзя хранить их в кэш?
Просто нельзя зайти в настройки и очистить data… прийдётся перелогиниваться. Да и после логина… эти 370 сразу же почти возвращаются… так что там и зачем?:)
Ваше досье для АНБ)
Ставьте Lite, там все гораздо скромнее и без лишних наворотов. Выглядит, правда, как привет из 90-х, но работает и ресурсов ест мало, особенно если его в фоне прибивать.
Спасибо за статью, познавателбно! Хотелось бы еще узнать, какие приложения из популярных выжирают батарейку, «будят» телефон. Список тот же +вибрь, ватсапп, 2gis, якарты.
Да, пожиратели батареи интереснее, чем пожиратели места. Но я бы начал с неотключаемых, по сути, гугло-аппов. Гугло-сервисы, Приложение Гугл, да и сама система Андроид. Как они ухитряются выжрать за день половину ёмкости батареи 2500 mah, если я от них ничего не прошу.
чесскажу, на моем телефоне никак:) У меня и за ночь то уходит 1 процент заряда батареи.
Все относительно. Начнем с того, что расход за ночь в большей степени относится к способности прошивки «усыплять» приложения. Во многом, зависит от типа «профиля» в котором функционирует прошивка. При этом, кому то может понадобится, чтобы даже когда смартфон лежал спящим, оповещения продолжали приходить. При таком подходе, ничего подобного «1%» добиться будет нельзя. Плюс, уровень сигнала базовой станции также приобретает «вес».
При использовании добавляются дополнителшьные факторы.
Наконец, величина «1%» ни о чем конкретном не говорит. Во-первых, зависит от полной емкости аккума — 1% для аккума 3000 и 4000 это, как вы понимаете, разные вещи. Далее, по причине того, что какому уровню разряда это соответствует, зависит целиком и полностью от интерпретации уровня заряда прошивкой, состоянием аккумулятора и от уровня заряда, на котором он находится (т.к. процесс разряда нелинейный).
> Приложение Гугл
Оно прекрасно отключается.
> Как они ухитряются выжрать за день половину ёмкости батареи 2500 mah, если я от них ничего не прошу
Вы не просите, а ваши приложения просят. Пуш-уведомления, геолокация, синхронизация, фоновое обновление данных и все такое.
Я тоже раньше отключал — и сервисы, и приложение. Потом включал сервисы, если надо было что-то из маркета загрузить. А на Йотафоне не могу. Один раз удалось остановить приложение, после этого оно отключилось, и все — телефон ушел в циклическую перезагрузку, пришлось сбрасывать к заводским настройкам из бут-меню.
В любом случае, это странный выход, удалять на корню приложения с большой загрузкой, тем более если им нет достойной альтернативы. Интереснее было бы все же понять, какие именно подпроцессы сажают батарею, и по возможности ограничить это влияние настройками.
>Я тоже раньше отключал — и сервисы, и приложение. Потом
включал сервисы, если надо было что-то из маркета загрузить.
Одно лечим, другое — калечим. Сэкономили заряд аккума, зато теряем время, включая каждый раз нужные сервисы и отключая их после использования.
Ну так и я о том, тупо отключать — выход, но слишком брутальный. Хотелось бы разобраться в вопросе и действовать более точечно.
Сервисы я не отключал никогда, а вот приложением не пользуюсь, поэтому всегда отключаю его со всеми остальными ненужными предустановками на любом устройстве сразу. Если хотеть ограничивать настройками, то надо в сторону оболочек с агрессивным энергосбережением смотреть, типа MIUI, EMUI и всего такого.
Идея хорошая, спасибо. Но проблема в том, что тут «ковырянием» ничего не сделать. Это надо просто статистические наблюдения проводить. Причем еще в зависимости от оболочки: MIUI может просто выгрузить приложение, обрубив ему фоновую активность, Clean UI (TouchWiz) предложит пользователю перевести приложение в «спящий режим».
Про MIUI понятно, там обрубается все, что плохо лежит. А что нужно — легко настраивается. За что им большое спасибо. А за MIUI 9 спасибо втройне. Очень, очень быстрая система.
Может быть потестить на чистом и незамутненном андроиде?
>> Может быть потестить на чистом и незамутненном андроиде?
Можно, конечно. Вопрос в целесообразности. Мне почему-то кажется, что если просуммировать всех покупателей Nexus + Pixel + Moto + Nokia, то их будет меньше, чем покупателей Xiaomi, не говоря уже про Samsung.
Ну, во-первых, что ожидает пользователя в самом худшем случае (т.е. на чистом андроиде).
Во-вторых, просто интересный материал. Ведь для 95 процентов народу (в том числе из посетителей МР) тоже абсолютно пофиг, весит вконтактик 15 метров или 30 и почему это происходит. Все равно скачают и поставят. Но почитать интересно.
Ну, а в-третьих, еще и можно показать, как с этим со всем делом бороться.
Якарты в фоне постоянно обращаются к геолокации, остальные все норм
Я в 2014 году не без интереса откопал в интернете т.н. android app performance report от разработчика антивируса AVG. Сейчас глянул — оказывается есть такое же прошлогоднее исследование.
Гуглить по фразе «avg android app performance report». Первая же ссылка, после рекламной, дает искомое)
Отлично, значит я как человек не зарегистрированный в соцсетях, еще и ресурсы своих гаджетов экономлю!!!
Отлично))
А времени сколько экономишь!
https://uploads.disquscdn.com/images/f861e87b67df7c3698b0323414ba8402647fa49ac22f27a5801213af0aaa38a1.jpg
Плюсую, сам хочу слезть с этой гадости. С ВК уже разделался, а FB и инстаграмм приходится юзать по работе.
Ставил тут недавно FB Messenger, по настойчивой просьбе хорошего приятеля. Удобнее ему так, видите ли, в WhatApp/Telegram какие-то ощущения не те. Поставил. Приложения сразу заняло 115 Мб во внутренней памяти устройства, плюс почти сразу после входа в учетку натянуло/нагенерило 90+ Мб данных. Итого стало занимать 206 Мб. Переписывалка. Которой я еще толком и не пользуюсь. Снес в очередной раз к чертовой матери, но вот тоже было бы интересно понять, а чего там столько весит-то?
У фейсбука есть лайт версии для мессенджера и основного приложения.
Ну про основное приложение я знал, но что они еще и с мессенджером так, это для меня открытие. Это вообще гениальный подход: вместо одного нормального, шустрого, экономичного приложения запилить четыре недобитка, да еще из социалки выпилить функцию обмена сообщениями. Надеюсь, остальные с них пример брать не станут.
Проблемы роста… В принципе это нормальное решение выпустить две версии если пользователю не нужна всякая загрузка видео и другие редко используемые вещи. К сожалению, андроид не позволят подгружать фичи по мере использования. Может мы и прийдем к этому однажды, вон гугл пилит свои микроприложения которые сами устанавливаются в браузере. Или однажды веб пожрёт всех мобильных разработчиков, остался всего год до момента когда веб получит очередной пиннок в этом направлении.
Ну какого роста, там уж сколько лет роста особо нет или он достаточно плавный. Функционально приложения не растут быстрее конкурентов, однозначно. Как бы две версии — full и lite — еще ок. Но 4 приложения вместо 1 — уже перебор. Давайте уж тогда и веб-морду тоже на две части поделим, так логично будет.
Лайт-версия Facebook никакая. Проще скачать Metal и пользоваться через него мобильным сайтом. А вот Messenger Lite можно брать 🙂
И, кстати, насколько корректно в данном случае сравнение с приложением LiveJournal? В нем же функционала — кот наплакал. Фактически, только читать можно и комментарии писать. Там даже картинку из поста в память устройства сохранить невозможно, не говоря уже про просмотр видео внутри приложения. Про какие-то там эмодзи и все вот это вот там вообще не вспоминали при разработке.
Я же написал, что полноценно сравнивать нельзя, но с точки зрения подходов — почему бы и нет. Например, по отношению к графическим файлам.
Ну так в нем потому и нет графических файлов, что нет функционала, которому они были бы нужны 🙂 Хотя… могли бы догадаться рекламы натолкать, как один красный оператор.
>> Ну так в нем потому и нет графических файлов
Есть же. Но они ограничены по плотности пикселей (а это очень важный для рассматриваемой темы подход, графика в 640 dpi «жрет» неслабо).
>> Хотя… могли бы догадаться рекламы натолкать
Именно так. Никаких баннеров и рекламных заставок. При том, что веб-версия сервиса — это засилье рекламы.
Кстати, да. Функционал приложения ЖЖ это нечто. Какие там эмодзи?! Это единственная программа в моем смартфоне, в которой даже перестаёт работать свайп при вводе! А при переходе по уведомлению, тупо попадаешь в шапку темы! И изволь там ищи свой пост во всей остальной мешанине сообщений! Оценка приложению — 0 (ноль). Элементарно необходимое не работает!
При таком огромном распространении живого журнала, имеет такую убогую программу — удивительно. Ощущение, что разработку приложения отдали какому-то забытому богом НИИ, которому плевать на результат. Если бы не ещё больше ужасное браузерное решение (с учётом адского рекламного напора в мобильной версии веб-интерфейса), давно бы убил это приложение.
Может кто подскажет сторонний клиент, чтоб перестать мучиться?
> При таком огромном распространении живого журнала
Да какое там уже распространение? Платформа тихо и планомерно загибается, топовые блогеры уходят или в другие сети, или вообще на standalone-блоги.
> плевать на результат
Администрации ЖЖ уже который год плевать на результат, очевидно же.
> давно бы убил это приложение
Зато можно быстренько на компактном устройстве просмотреть ленту без рекламы, это ли не сказка?
> сторонний клиент, чтоб перестать мучиться
Учитывая постоянно падающую популярность платформы, вряд ли кто-то будет всерьез что-то стоящее под нее разрабатывать. Вроде по BeBlogger неплохие отзывы, но сам не проверял.
Понятно. Значит, я скорее по инерции считал, что ЖЖ в тренде. Оказывается, он загибается. Отсюда и убогое приложение.
Какая у ресурса администрация, такое у него и приложение ))
Платформа загибается, приложение развивать не собираются. С поддержкой приложения поначалу (много лет назад) пытался переписываться и жаловаться. Типичный диалог:
— У вас в приложении гланды удалять очень неудобно
— Ну вот смотрите, можно же через ж..у удалить, так что всё нормально
— Ну неудобно же!
— Удобно, пользуйтесь
И вот я пользуюсь им… пока в ЖЖ остаётся пара-другая интересных мне блоггеров. Они уйдут, и я с облегчением удалю это поделие.
На плей маркете сейчас бесплатно раздают приложение для лицокниги Fella. Весит всего 3мб. Шустрое приложение в отличном от родного
Неофициальный клиент ВК — Kate Mobile — 6 Мб. Разрабам из ВК есть чему поучиться.
Спасибо автору за развитие этой темы. Это достаточно злободневно.
По Фейсбуку. Непонятно, зачем такой объем для локализации. Почему нельзя загружать только основные языки в системе. Вместо этого туда валятся, видимо, все подряд, включая те, которые никогда на конкретном аппарате не будут использованы. Может, это проблема Андроида в целом. Хорошо, если автор прояснит этот вопрос.
Стандартный способ, который рекомендует Google — зашивать локализацию в приложение. Чтобы работать со скачиваемыми файлами надо специально заморачиваться, что просто никто не хочет делать.
Интересует еще приложение Сбербанк. Однако, подозреваю, что там встроенный антивирус сжирает большой кусок. Ну и Хром. Великий и ужасный. Что можно кроме рекламы затолкать почти в 70мб(!), я не понимаю. Это же всего-лишь браузер!
Не, хром хороший стал сейчас. Мне нравится его виджет закладок. Нравится скачивать страницы.
Я не про функционал, а про размер приложения. И ворочается он неспешно на вполне рабочем железе в отличии от многих других прог. Возможно, это связанные вещи. Если в Мой МТС рекламы набили под завязку, то что в браузер можно запихать на 70мб — не понимаю. Размер может быть связан с плохой оптимизацией приложения. Может автор сможет отчасти пролить свет на этот вопрос.
Ну, может размер соответствует функционалу? В данном случае.
Еще размер связан с тем, что нужно поддерживать обратную совместимость с предыдущими версиями ОС.
Хром смотрел, там почти все — бинарная библиотека Chromium. Ни рекламы, ни графики особо нет, само приложение на Java — небольшое.
Бинарная библиотека это т.н. «движок»? Вещь в себе, конечно, если так. Интересно, все браузеры такие тяжелые нынче? Других на Дроиде не юзаю просто. Хром нужен для полноценного использования в экосистеме Гугла.
>> Бинарная библиотека это т.н. «движок»?
Ага.
Т.е. написано и откомпилировано на каком-нибудь с++, для эффективного исполнения. На Яве пишется, интерфейс, если условно. Так вроде. А тормоза, видимо, часто происходят от неэффективного и громоздкого Ява-кода, который насовали в свои страницы не сильно разборчивые веб-дизигнеры?
Там несколько сложнее получается. Движок написан на C++ не только для эффективности, но и для кросс-платформенности (нативный код под любой ОС получается). На Java — вся обвязка сверху. По сути — да, интерфейс.
Веб-разработчики пишут скрипты на JavaScript (который никакого отношения к Java не имеет).
Небольшой полуофф. Есть вопрос к вам, как к разработчику. Куда складирует apk файлы Андроид при установке приложений, или не складирует вообще? Просто для целей отката на предыдущую версию в отдельных случаях. Некоторое время использовал Appwhererabbit. Поначалу показалось замечательно, но он создал такую гигантскую базу программ, что забил половину всей памяти смарта. Полный функционал там платный, да и мне нужно было лишь на отдельные программы сделать бекап. Вот я и подумал, может вручную сделать реально?
Если бэкап и восстановление, то проще всё смотреть встроенное в MIUI. А так-то в папку /data ставится. Точнее могу глянуть после каникул, когда доберусь до рутованного аппарата.
В связи с забитой памятью телефона, которому 1,5 года, пришлось останавливать и удалять обновления со встроенных приложений. Так вот, за полтора года объем приложений вырос в 4 (!!!) раза. При внешне мало изменившейся функциональности.
Тут дело еще и в том, что любое обновление системных приложений сразу отжирает кучу места, когда приложение становится пользовательским (а системным его без рута не сделать). Те же сервисы Гугл Плей (+ Гугл аппсы) занимают совсем дикие объемы при сомнительной полезности
хотел бы добавить, что facebook на iOs еще печальнее. 237.4 MB последняя версия. вдумайтесь в цифру. и мессенджер еще 133.7 MB.
и в противопоставление.
VK. 26.2 MB
одноклассники уже 73.8 MB
А они будут расти и расти, потому что компании убеждены что без кнопочки над которой трудится 100 программистов и которую вы никогда и не увидите, вы просто от отчаяния перейдете к конкурентам.
В том числе поэтому юзаю Facebook Lite — мессенджер внутри. Не хватает только звонков 🙁
Андрей, спасибо за статью. По поводу вопроса «что дальше» — может быть немного больше разбирать приложения, хотя это наверное будет уже интересно только гикам или программистам… И так же интересно ещё и другое — механизм установки приложения в ОС. Сам дистрибутив того же ФБ весит допустим 70 мб, то это совсем не значит, что оно и в системе будет занимать 70 мб. После установки оно занимает уже >200-300мб. Не говоря уже о кэше.
Ну и особенности установок софта так же интересны. Т.к. на тех же 7-ках и выше это перестало требовать столько процессорных и временных ресурсов, как было на прошлых версиях ОС. Установка почти моментально происходит.
Я вообще думал, что автор сделает netcat и разберёт объём и частоту передачи трафика, особенно при свёрнутом/не запущенном приложении (т.е. из служб приложения).
Кстати! отличная идея!
Просто ЖЖ — настолько глючное, тормозное и убогое приложение, что его размер не имеет значения.
Кстати размер АПК (или что там скачивается, когда нажимаешь установить/обновить в плей стор) разный для разных версий андроида.
Обновление хрома на 6.0.1 31мб, а на 7.0 19мб (или наоборот, запамятовал).
Давайте и про ios такую же рубрику. Размер youtube/twitter вызывает полное недоумение. Это криворукие программисты или следствие особенностей ios?
Ответа на вопрос: Почему приложения такие большие? Так и не увидел.
Вот тоже весело:
Яндекс диск на телефоне успел скушать 592 мегабайта под себя
Гугл хромой — 210 мегабайт
Фейсбук мессенджер — 158 мегабайт
Сбербанк онлайн 125 мегабайт
Проверить бы их на вшивость. С чего они такие толстые.
Так это кэш, его можно стереть в настройках.
А почему заголовок такого не грамотного содержания? Большие в плане габаритов или взрослые или все же размер в мегабайтах? Вы бы хоть кавычки поставили ))))). Компетентный типа ресурс ёмаё…
На iOS Facebook весит 220мб, а VK — всего 15… тем более, что если найдутся люди, пользующиеся Facebook-messenger, то это отдельное приложение и тоже весит около 200мб…
если общаешься через фб, а не только стену листаешь, то придется еще и мессенджер качать 🙁 и в тоже время есть fb lite который размером пару мегабайт и имеет практически весь функционал основного приложения и мессенжера… в общем странная политика
вот и я к тому же, мало того, что само приложение весит чёрт знает сколько, так ещё и мессенджер качать отдельно, который столько же весит… у ВК одно приложение, в котором сразу есть всё и оно весит всего 15мб…
Поддержу всех возмущающихся. Где это фейсбук занимает 70 Мб? в магазине? может быть. у меня он занимает 347 Мб. при этом 272 Мб это данные, не Кэш, а именно «данные», которые не очистишь как тут советовали. Перенос на SD так же бесполезен. ну перенесли 74 Мб. самый же основной размер остался.
>> Где это фейсбук занимает 70 Мб? в магазине?
Вроде бы русским по-белому написано: APK-файл.
Вроде бы нет… 🙂