На прошлой неделе мы подробно рассмотрели причины, по которым смартфоны Apple были и будут быстрее актуальных флагманов на Android. Статья вызвала массу обсуждений, и мы решили развить тему. В этом выпуске — о том, как «улучшают» Android OEM-производители смартфонов и что получается из таких улучшений.
В этой статье ничего не будет об ошибках и неудобствах чистого Android – некоего эталона, состоящего из комбинации AOSP и сервисов Google. Именно такой Android устанавливается в смартфоны линеек Android One, Google Pixel и смартфоны некоторых производителей (например, Motorola и Nokia). Такой Android мы назовём «хорошим»: нравятся ли пользователю его особенности или нет, но именно так он был спроектирован. В сравнении с тем, что выходит с заводов большинства производителей смартфонов, «хороший» Android чаще бывает хорошо оптимизирован и с большей вероятностью будет регулярно обновляться – по крайней мере, у тех производителей, которые сделали «чистый Android» своей маркетинговой особенностью.
Здесь и сейчас мы поговорим о том, как производители – те самые HTC, LG, Samsung и прочие, — пытаются улучшить систему, и что из этого получается.
Первым, что нас встретит при включении любого новенького флагмана, будет анимированная заставка, бут-анимация. Американские производители скромны: на iPhone и iPad в течение всего процесса загрузки мы имеем счастье наблюдать лишь белое статичное яблоко. Смартфоны на Windows 10 Mobile радуют таким же статичным голубым логотипом Windows. Google значительно менее скромен, выводя весёлую разноцветную анимацию, которая ещё и отличается для разных версий Android.
Что объединяет заставки этих производителей, крупнейших конкурентов? Нас не беспокоят лишними звуками.
«ЛА-ЛА-ЛА!», — кричат телефоны LG при включении. «УПСС-БУМЦ!», возвещает нас о загрузке флагман HTC всей мощью динамиков Boom Sound. Самые разнообразные, но неизменно громкие трели издают смартфоны, дооснащённые самой первой свистелкой, отвечающей азиатским представлениям о прекрасном. И если у китайской Lenovo, маскирующейся под американскую Motorola, эту свистелку можно будет отключить в настройках, то смартфон LG или HTC, самопроизвольно перезагрузившийся посреди ночи, непременно уведомит об этом радостном событии сонного владельца.
В Android – отлично продуманная и прекрасно реализованная система уведомлений, на голову превосходящая реализацию уведомлений в iOS. Казалось бы, что здесь можно улучшить? Увы, производители это сделать сумели. Каждое такое улучшение производит разрушительный эффект.
Начнём с HTC. По какой-то причине обозреватели повторяют друг за другом, что свежие поколения HTC Sense – это почти чистый Android, аккуратно улучшенный в нужных местах. Извините, дорогие обозреватели, но «улучшить» Android кривыми руками – не получится. Вот что сделали программисты HTC с уведомлениями.
«Что-то после обновления постоянно начали звуковые уведомления приходить от приложений хотя по умолчанию стоит без звука и на 7-ке все нормально работало», жалуется пользователь. Далее следует развесистая инструкция, куда заходить и как отключать звук для каждой установленной и системной программы, а также для отдельных подкатегорий каждой программы. Результат — «Помогло, но не сильно — включения звука на смарте стали реже, но не пропали».
Смотрим на первый скриншот:
Что мы здесь видим? Самая обычная настройка звуков уведомлений из самого что ни на есть стандартного Android. Казалось бы, что здесь может пойти не так? Настроили звук уведомлений на бесшумный режим и наслаждаемся покоем; телефон побеспокоит нас звонками, но не будет пищать, кричать или свиристеть на всю комнату на каждое полученное письмо.
Однако разработчики HTC лучше знают, что нужно пользователю. Как так – уведомления, да без звука? И «улучшают» Android, добавив свою собственную кривую надстройку дискретного управления уведомлениями. Теперь все (все!) приложения, сколько бы их ни было установлено на смартфоне, игнорируют беззвучный режим уведомлений, который выбран в настройках. Звук же контролируется чем-то вроде того, что показано на скриншоте ниже:
И если в стандартном Android даже те уведомления, для которых вдруг разрешён звук, проиграют бесшумное уведомление, то разработчики HTC решили иначе: для каждого уведомления будет проигрываться какой-то звук, никак не связанный с тем, что было выбрано в настройках. На устройстве установлена сотня приложений? Придётся пройтись по всем в настройках HTC и отключить звук для каждого из них. Установили новое приложение? Не забудьте зайти в настройки уведомлений и тоже отключить ему звук, иначе вас может побеспокоить неприятный сюрприз.
Почему такая мелочь стоила такого количества букв? Потому, что на HTC U11 пришлось убить больше полутора часов, пытаясь отключить звуковые уведомления для всех приложений — и всё равно время от времени телефон подаёт голос! Честное слово, это «улучшение» — уже достаточная причина, чтобы избавиться от назойливого флагмана.
Кстати, поругав HTC, не могу не остановиться на оболочке LG, в которой вообще нельзя выбрать «беззвучный» тон для уведомлений! Сама мысль о том, что кому-то может не понравиться постоянный трезвон телефона, не посетила головы программистов LG:
Результат? Приходится самостоятельно записывать файл с «пустым» звуком. А про звук начала и окончания процесса зарядки, который невозможно отключить из настроек, я и вовсе молчу: телефон еженощно радует бодрым пиликаньем «ура! я зарядился!»
А теперь вопрос: это баг? Нет! Это – сознательное решение программистов (ну не дизайнеров UI же) из LG, кочующее из одной версии Android в другую. 5.0, 5.1, 6.0, 7.0 – везде одна и та же картина. Молодцы, здорово улучшили!
В HTC уведомления работают и выглядят именно так, как должны по замыслу разработчиков Android. А вот некоторые другие производители любят «делать красиво», уродуя стандартный дизайн Android и пытаясь сделать «как в айфонах». Получается… получается очень плохо. Примерно как в китайских бум-боксах из 90-х с кучей мигающих лампочек и ярких цветов.
Вот так это выглядит у Huawei:
А вот какой кошмар сделала небезызвестная LeEco:
А вот так представляют себе идеальный интерфейс Android 6.0 в LG. Очень крупные кнопки навигации, очень крупные иконки переключателей сверху, которые очевидно не влезли в размер, и уже без того улучшенные стандартные переключатели пришлось дополнительно улучшать при помощи горизонтальной прокрутки.
Чем плохи такие интерфейсы? Как и все свистелки-мигалки, подобные интерфейсы мало того, что являются очевидными проявлениями плохого вкуса («о вкусах не спорят» — не в эту оперу; вкусы у человека будут плохими и даже ужасными, если их не воспитывать с детства), так ещё и ломают пользовательский опыт резкими переходами между ставшим уже классическим материальным дизайном Android и цветастым полупрозрачным изыском.
Ещё один момент, который некоторые производители пытаются сделать так, как сделано в iOS – управление яркостью экрана. В свежих версиях Android при включении автоматического управления яркостью ползунок контролирует не яркость напрямую, а кривую зависимости яркости экрана от внешнего освещения. Это логично: достаточно один раз выставить ползунок в удобное положение, и о нём можно забыть навсегда.
Увы, но ряд производителей «улучшает» эту логику, привязывая ползунок яркости в авто-режиме напрямую к уровню подсветки экрана. Так, например, сделали разработчики OnePlus (как всем известно, их прошивка OxygenOS – это как чистый Android, только лучше). В результате если выбранные автоматикой уровни яркости не устраивают, ползунок приходится постоянно двигать туда-сюда. То, что именно так организовано управление яркостью в iOS – не спасает от приступов раздражения.
Говоря о OnePlus последних моделей, нельзя не упомянуть и ещё одно важное «улучшение». В компании решили добавить аппаратный переключатель режимов уведомлений, сделав его «как в iPhone, только лучше». Трёхпозиционный переключатель в OnePlus 5 и 5T позволяет удобно и быстро переключаться между звуковыми и беззвучными режимами уведомлений. Казалось бы, удобно! Увы, совсем нет: китайские программисты не сумели осилить логику переключения режимов уведомлений Android, и полностью выбросили из прошивки такую полезную вещь, как автоматическое включение режима «не беспокоить» по расписанию и по событиям (например, в по важным встречам календаре). Пользователю предлагается перенестись назад в те благословенные времена, где не было умной электроники, а было много железных тумблеров. Нужен бесшумный режим на ночь? Переключите тумблер! Забыли переключить и вас разбудила пришедшая рано утром рекламная SMS? Не надо винить рукастых программистов из Китая, просто в следующий раз не забывайте перещёлкнуть тумблер.
Здесь нужно отметить, что не прошло и пяти поколений устройств, как программисты OnePlus исправили проблему. В июньской прошивке для OnePlus 6, наконец, появился долгожданный режим.
За что я люблю смартфоны Pixel – так это за идеальную, образцово-показательную оптимизацию. При том, что первое поколение Pixel использовало процессоры с заниженными частотами и комплектовалась довольно медленной по стандартам 2016 года памятью, смартфоны от Google работают идеально плавно, как по маслу. Нет лагов и подёргиваний анимаций, нет неожиданных перегревов, нет ужасной неторопливости после того, как смартфон «просыпается» из состояния глубокого сна. Приложения запускаются с предсказуемой скоростью и работают предсказуемо плавно. Честно говоря, именно чёткость и плавность работы Pixel – именно то, чего стало заметно не хватать на последних версиях iOS (камень в сторону iOS 11).
Сравнивая Pixel первого поколения с псевдофлагманом HTC U Ultra (Snapdragon 821, UFS2.0) невозможно не заметить, что смартфон от HTC склонен и перегреву, а временами начинает подтормаживать, оставляя ощущение, что процессор работает из последних сил. Просыпаясь из состояния глубокого сна, первые несколько секунд U Ultra нетороплив, как сонная черепаха (вплоть до того, что шторка уведомлений открывается рывками, да и то после заметной задержки). Что это – проблема Android? Нет: на Pixel, работающем на похожем железе, ничего подобного не наблюдается. Просто плохая, очень плохая оптимизация.
Подобных примеров я могу привести массу. LG G Flex 2 – перегрев, причём зачастую – в состоянии простоя, когда устройство вдруг начинало что-то считать с выключенным экраном, обжигая карман. Об утечках заряда из-за непобеждённых wakelock-ов ядра, приводящих к абнормальному поведению смартфона в простое, можно писать целую серию статей (попробуйте поискать netlink wakelock); справиться с такими вещами невозможно даже с рут-доступом, поможет только исправление от производителя или кастомная прошивка.
Как вам понравится, если телефон превратится в немой чёрный брусок после очередного штатного обновления? Ситуация достаточно редкая для большинства производителей, но, увы, встречающаяся. Впрочем, если баг затрагивает небольшое количество пользователей и лишь время от времени – большого ущерба репутации производителя он не принесёт. А вот если все устройства после получение ОТА вдруг начинают блокироваться – это уже не очень хорошо.
Именно такое «улучшение» внесли в Android горе-разработчики OnePlus. С выходом Android 8 что-то пошло не так, и абсолютно все пользователи устройств OnePlus 5 с разблокированными загрузчиками, установившие первое, второе, а потом и третье обновление (их выпускали с перерывом меньше недели) получили ошибку расшифровки данных: телефоны не загружались. Сброс данных и последующее восстановление из «облачной» резервной копии помогали – ровно до следующего обновления.
О качестве драйверов в Android можно писать много хорошего, но всегда ли виноват производитель? Ведь некоторые драйверы поставляет производитель набора системной логики (к примеру, Qualcomm), а некоторые – например, к модулю видеокамеры, — и вовсе сторонние компании-производители. Удивительно, что эта «сборная солянка» вообще работает… впрочем, стоп: а работает ли?
Возьмём для примера ту же компанию OnePlus, программисты которой допустили критическую ошибку, не учтя особенностей шифрования восьмой версии Android. Компания установила «революционный» модуль камеры, на матрице которого присутствуют датчики фазовой фокусировки. Маркетологи глубоко вдохнули и анонсировали OnePlus 5 под лозунгом «Clearer photos». Казалось бы, что может пойти не так?
Посмотрим на вот эту фотографию:
Что это? Почему небо – в горошек? Как оказалось, в OnePlus сэкономили, заказав у SONY модуль с драйверами, но решив не оплачивать техподдержку, разработку и исправление найденных ошибок. В результате поток данных, который получили программисты OnePlus, не принимает во внимание наличие фазовых точек фокусировки, которые и выглядят на снимках как бодрый горох. Очевидно, такие снимки невозможно было бы продать как “clearer photos”, и программистам OnePlus была поставлена задача замаскировать проблему. Что они успешно и проделали, включив запредельные настройки шумоподавления, вместе с «горохом» фазовых точек съедающих и все мелкие детали на снимке. Проблема решена!
Может быть, это единичный случай? Ничего подобного: с тем же модулем, с теми же драйверами и ровно с теми же проблемами полгода спустя компания выпускает второй телефон, OnePlus 5T. Наступили на те же грабли после долгой и громкой ругани пользователей? Какая разница, если и так купят!
О качестве драйверов мы уже рассказали. Именно драйверы могут стать причиной плохой работы устройства. Особенно явно это становится заметно тогда, когда производитель решает сэкономить, и обновляет версию Android, оставляя без изменения оригинальные драйверы.
Как это возможно? Вплоть до Android 8 с его Project Treble, каждая новая версия Android включала ряд изменений в API, заставляя производителей чипсетов выпускать новые версии драйверов для крупных обновлений системы. Выпуск драйверов не бесплатен, и производителям смартфонов приходилось платить за обновлённый код – или по факту, или в рамках заключённого контракта при закупке микросхем. Но что, если производитель не хочет оплачивать новые драйверы, а обновить систему приходится? В таких случаях часто прибегают к программной прослойке, транслирующей новые вызовы API к той версии API, которую поддерживают старые драйверы. Вообще говоря, так делать неправильно; такой подход очевидно ограничивает и производительность, и совместимость системы, часто не даёт доступа к новым возможностям свежей версии Android. Тем не менее, этот подход весьма популярен среди разработчиков кастомных прошивок – в силу того, что свежих драйверов может просто не быть (классический пример из недавних – выпуск кастомных прошивок с Android 7, 8 и 8.1 для смартфонов LeEco, которые не получали обновлений базовой версии Android 6.0 с момента выхода).
Если вас заинтересовала система «прокладок» для эмуляции новых API, рекомендуем статью Cameras in Custom ROMs: How Developers Make Hardware Work without Source Code
К сожалению, отдельные производители используют ровно тот же подход. Смартфоны OnePlus 5, 5T были выпущены с Android 7 на борту. Обновление до Android 8 использовало старые драйверы и программную прокладку (shim). Впрочем, отдадим должное OnePlus: компания прислушалась к голосам пользователей и в проллом месяце выпустила прошивку с поддержкой Project Treble, исправив таким образом проблему.
К сожалению, подобным образом поступает крупнейший производитель смартфонов на Android – компания Samsung, причём для собственных чипсетов Exynos.
Для начала – статья: Samsung, Exynos and AOSP Explained: A Story of Betrayal
В этой статье разработчики очень подробно и детально описывают, как именно в Samsung всё, что можно сделать неправильно – сделано неправильно. В частности, Samsung часто использует программные прослойки для трансляции API при обновлении версий Android. После многочисленных обновлений изменения накапливаются, программные прокладки становятся всё толще, а производительность – всё хуже. Именно из-за многочисленных прослоек оболочка от Samsung со временем начинает работать из рук вон плохо даже на мощнейших устройствах. Это происходит вовсе не потому, что Samsung их как-то специально искусственно замедляет; просто иначе они не умеют.
Мы обсудили свистелки и исковерканный UI, отсутствие оптимизации и низкое качество драйверов. Как ещё можно испортить Android? Оказывается, можно. Можно просто быть Samsung.
Если многие производители делают софт и драйверы из подручного материала и палок, то программистам Samsung палок не завезли. На выходе получается оболочка, умудряющаяся заметно подтормаживать и подлагивать на процессоре, мощность которого превосходит CPU ультрабуков. О техническом уровне программистов Samsung говорит история с собственной разработкой компании, ОС Tizen, о которой писали буквально следующее:
«Возможно, это худший код из тех, что мне довелось видеть. Все ошибки, которые можно было допустить, были допущены. Очевидно, что код писал или проверял кто-то, кто ничего не понимает в безопасности. Это все равно, что попросить школьника написать для вас программное обеспечение.»
Конечно же, в Samsung не могли не отреагировать на такое заявление. После того, как результаты исследования были опубликованы на Motherboard, компания Samsung начала работу над исправлениями. Результат впечатляет: код Tizen больше не является «худшим в истории». Теперь, согласно The Resister, код просто плохой.
Да, но при чём здесь Tizen, ведь говорим-то мы об Android? И действительно, та часть ПО Samsung, которая написана специалистами Google, вполне работоспособна. Проблема же в том, что Samsung стремится максимально переписать, переделать ОС от Google, заменив всё, что можно, программами собственного изготовления, переделав систему как визуально, так и изнутри. Результат? Лаги, подтормаживания, аляповатые и непоследовательние визуально-графические решения в интерфейсе и многочисленные ошибки.
А приложения-дубликаты? Когда я покупал свой первый смартфон на Android, я запутался. Почему есть «контакты» и «контакты»? Зачем два разных браузера? Почему есть «часы» и «часы»? Для чего два почтовых клиента? Со временем уважающие себя производители перестали включать приложения собственной разработки, дублирующие основной функционал Android. Но не Samsung, упорно вставляющий собственный веб-браузер (зачем? Он что, умеет переводить страницы с иностранных языков или синхронизировать пароли с облаком Google?), собственный почтовый клиент и массу других утилит собственной разработки.
А знаменитая кнопка Bixby, случайное нажатие которой активирует ассистента? Отключить эту кнопку можно, но для этого нужно сначала настроить Bixby, а для этого – скачать и установить множество мусорных программ от Samsung, о которых я уже рассказал выше.
Отдельно отмечу потрясающую находку Samsung в области безопасности.
В любом другом смартфоне, сертифицированном Google, для разблокирования загрузчика нужно сначала разрешить OEM Unlocking в настройках, потом перегрузиться в fastboot, разблокировать загрузчик командой fastboot oem unlock или подобной – и сразу же лишиться всех данных. Уничтожение данных при разблокировании загрузчика – важнейший элемент безопасности, позволяющий защитить данные от несанкционированного доступа через рут или кастомное рекавери.
В Samsung (по крайней мере, в модели Galaxy S8) разблокирование загрузчика делается так: разрешить OEM Unlocking в настройках и… и всё. Можно загружаться в кастомное recovery, ставить рут, извлекать данные. Зияющая дыра в безопасности, оставленная как будто специально – причём страдают от неё вовсе не любители поставить рут или кастомную прошивку, а самые обычные пользователи, данные которых могут быть запросто слиты с использованием разблокированного загрузчика.
Если после всего перечисленного вы всё равно считаете вариант Android от Samsung «нормальным» — мне нечего добавить.
Хорошая операционная система обновляется быстро, чётко и по расписанию. Apple iOS уже давно считается эталоном в отношении обновлений, но есть и другие производители, которые прекрасно обновляют свои устройства. Для начала посмотрим на эту табличку (источник – SecurityLab):
Как видим, Apple iOS и Microsoft Windows 10 Mobile обновляют свои устройства в течение длительного срока, регулярно и своевременно. Более того, Microsoft продолжает обновлять смартфоны на Windows 10 Mobile – даже те, которые были выпущены сторонними производителями! – несмотря на отказ от развития платформы. Такая политика достойна уважения, ведь подавляющее большинство производителей смартфонов на Android обновляет свои модели по принципу: «Будет хорошо продаваться – может, когда-то и обновим. Нет – тихо забудем.»
Вот, к примеру, HTC.
Несколько лучше обстоят дела у OnePlus:
Motorola когда-то являла собой пример компании, которая не только поддерживала свои устройства в течение длительного времени, но и быстро их обновляла до актуальных версий Android благодаря использованию чистой версии системы.
LG печально известна своей неторопливостью. Ещё бы: обновить настолько сильно «улучшенную» оболочку – это сколько работы улучшателям!
А как обстоят дела у Samsung? Крупнейший производитель смартфонов с Android является и самым неторопливым среди конкурентов.
Samsung – самый неторопливый? Это мы ещё не видели BlackBerry! Обновляемость устройства на Android никак не зависит от именитости компании, громких обещаний или цены устройства. Компания BlackBerry, которая обещала двухлетнюю поддержку для DTEK60 (между прочим, Snapdragon 820 и совсем не божеская цена), с момента выхода устройства в 2016 выпустила обновлений Android… ноль. А что с двухлетней поддержкой? Видимо, имелись в виду исключительно патчи безопасности.
А есть ли производители, которые аккуратно обновляют Android? Да, их два: Google и Nokia. Про Google можно особо не говорить: основная «фишка» их устройств – как раз в получении обновлений напрямую от производителя, и было бы странным, если бы эти устройства поздно получали обновления.
Обновления Android от Google:
Ещё одна компания, регулярно обновляющая версии Android (по крайней мере, на флагманах) – «новая» Nokia под управлением HMD Global. У компании пока всего один флагман, выпущенный на предыдущей версии Android, и статистику мы пока не накопили. Тем не менее, первоначальный результат обнадёживает.
Обновления Android от Nokia:
В хорошей мобильной ОС прекрасно всё: и драйверы, и внешний вид (даже если внешний вид системы – вопрос вкуса, то последовательность в использовании выбранной концепции интерфейса – уже вполне объективный показатель). Разумеется, очень важна плавность работы. Немаловажны и вопросы безопасности, поддержки и регулярных обновлений со стороны производителя. Именно такой пользовательский опыт предлагает Google в своих линейках Pixel и Pixel 2.
К сожалению, у других производителей дела обстоят далеко не так радужно. Исковерканные, безвкусные вариации пользовательских интерфейсов (и я сейчас не о дизайне домашнего экрана – ланчер-то заменить легко), разнообразные свистелки, «улучшенные» уведомления, которые физически невозможно заставить замолчать, зияющие дыры в безопасности, оставленные будто бы нарочно, отвратительного качества драйверы, которые через программные прокладки будут использоваться снова и снова в новых версиях Android – при условии, что эти новые версии вообще будут… Все эти вещи – отличный повод поругать Android.