[Перевод] Разрабатывать приложения под Android — словно быть (демонетизированным) ютубером

habr.png

Как известно, некоторые авторы на YouTube крайне недовольны условиями, которые предлагает эта платформа. Аналогичное сражение сейчас ведут разработчики Android-приложений на платформе Google Play. Попытаюсь за 20 минут объяснить, что не так с Android.

Когда-то Android считался лучшей мобильной платформой: контроль, настраиваемость, продвинутые функции, реальная многозадачность, поддержка даже редких случаев использования и свобода разработчиков. Это была лучшая платформа для науки и образования: во-первых, инструменты разработки свободны и кросс-платформенны, во-вторых, Android был очень гибкой ОС, которая не мешала экспериментировать с инновационными концепциями и возиться с оборудованием. Теперь всё это быстро исчезает.

Раньше основные релизы Android приносили новые функции, которые радовали и разработчиков, и пользователей. Но с какого-то момента я уже начал бояться анонсов новых версий, и до сих пор ищу в себе силы (хех), чтобы посмотреть на список изменений и рекомендации для разработчиков к последнему релизу. И новые версии — это не единственная причина для нервотрёпки: изменения в политике Google Play Store тоже всегда забавно читать.
Для начала немного контекста: до Android я экспериментировал с Windows Mobile 6.x и перешёл на Android после выхода версии 4.2: помню, что вскоре после этого анонсировали 4.4, и она стояла на моём первом Android-телефоне до конца его жизни. Android стал первой и пока единственной мобильной ОС, где я серьёзно вложился в разработку приложений.

Я начал возиться с разработкой приложений незадолго до выхода 6.0 (Marshmallow), так что я не старожил и не могу сказать, что наблюдал эволюцию Android с самого начала, и, конечно, не наблюдал весь процесс с точки зрения разработчика. Тем не менее, перед моими глазами прошло десятилетие изменений — даже во время экспериментов с Windows Mobile я обращал внимание, что происходило в лагере Android, хотя на эти телефоны у меня ещё не хватало денег (всё уходило на «карманные компьютеры» под Windows Mobile). Я отлично понимаю, насколько неудобен был для пользователей и разработчиков Android 4.x и раньше: я и сам мог попробовать эти версии, и мои приложения должны были их поддерживать.


С каждой версией Google изменяет Android API. Эти интерфейсы в значительной степени определяют, что можно и нельзя делать приложениям. Кроме того, некоторые API требуют разрешений, на которые вы соглашаетесь при установке, а некоторые из этих разрешений можно установить при запуске (идея в том, что приложение должно деградировать грациозно, предоставляя отдельные функции без получения некоторых разрешений). Это относится к API для работы со списком контактов или местоположением.

Новые версии Android включают новые API. Раньше в старые API из предыдущих версий не вносилось практически никаких изменений. То есть старые приложения продолжали нормально работать.

В последние два-три года новые версии Android начали удалять и изменять старые API. Например, если приложение хочет оставаться активными в фоновом режиме, то оно теперь должно отображать постоянное уведомление. Идея хорошо звучит в теории, но в итоге у вас постоянно несколько уведомлений, по одному для каждого фонового приложения. Например, у меня на телефоне постоянно висит два уведомления: одно для диктофона, второе для эквалайзера. Одно из моих собственных приложений тоже должно постоянно показывать уведомление в Android 8/Oreo и более новых версиях для надёжного фонового сканирования Wi-Fi, чтобы установить появление пользователя в определённых местах.

В будущей версии Android 10/Q возможности приложений ещё больше ограничат. Google убирает доступ к буферу обмена, убивая целую категорию приложений для управления буфером обмена (история скопированных фрагментов, синхронизация с другими телефонами, компьютерами и т. д.). В настоящее время все приложения могут получить доступ к буферу без специальных разрешений. Можно было решить проблему, добавив запрос на разрешение, а не полностью удаляя API. Приложения больше не могут включать и выключать Wi-Fi, что не позволяет, например, автоматически отключать Wi-Fi во время поездки на автомобиле. Google думает полностью запретить приложениям доступ к произвольным файлам во «внешнем хранилище» (SD-карты и область внутренней памяти на вашем телефоне, где лежат скриншоты и фотографии, MP3, образы для эмуляции и т. д.).

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

Это значительные изменения. Нормальные приложения могут перестать работать. Разработчикам придётся их обновить, чтобы реализовать менее удобные обходные пути, внедрить объяснительные сообщения и так далее. Это требует времени, усилий, денег и т. д., которые можно было потратить на исправление других проблем или разработку новых функций. Небольшим командам или инди-разработчикам, особенно которые занимаются этим в свободное время, может быть очень трудно догнать последние «тенденции» Google. Например, из-за изменения работы фоновых сервисов я в течение лета провёл большую часть своего свободного времени, перепроектируя архитектуру одного из приложений, что в свою очередь привело к появлению новых ошибок, которые пришлось диагностировать, исправлять и т. д., чтобы упомянутое приложение показывало уведомление и корректно работало в последних версиях Android.

Даже без выпуска новых версий Android компания Google может отправить в утиль старые API: например, установить новые правила Play Store, запретив приложения с определёнными разрешениями. Недавно Google запретила разрешения на доступ к SMS и журналу вызовов: соответственно, все такие приложения изгнаны из каталога.

Такие приложения по-прежнему можно установить напрямую из APK или альтернативных каталогов, но не Play Store. На практике получается, что из многих приложений в Play Store вырезают ключевую функциональность. Например, диктофон больше не может указать номер телефона в аудиозаписи, а приложения автоматизации больше не могут использовать SMS-сообщения как триггер для действий. Поскольку 99% пользователей скачивают приложения из Google Play, данная функциональность теперь запрещена и доступна только очень абсолютному меньшинству пользователей, которые знают, как обойти эти ограничения.


Разработчики в Play Store всё больше чувствуют себя как создатели контента для YouTube, где изменения политики происходят внезапно и без предупреждения. На YouTube продюсеры всегда опасаются, что контент будет демонетизирован по какой-то причине: это решает полностью автоматизированная, непрозрачная система, также как и реагирование на жалобы правообладателей. В Play Store теперь тоже приходится постоянно следить, по какой новой причине внезапно могут удалить ваше приложение или заблокировать учётную запись разработчика, вместе со всеми другими аккаунтами, которые Google сочтёт причастными:
И это лишь отдельные примеры даже не самых «страшных» историй, которые через день публикуются в r/androiddev. В соответствующей «категории» десятки историй по каждой такой теме. Иногда похожие случаи попадают на Hacker News. Похоже, Google относится к бану аккаунтов и удалению приложений Play Store с тем же легкомыслием, что и модераторы онлайн-игр, которые по малейшему поводу банят игроков по подозрению в мошенничестве. Для большинства игроков онлайн-игры — просто развлечение, в отличие от разработки приложений для Android. Возникает очевидный вопрос: что делать людям, которых забанили?

Теперь я понимаю, что аналогия с YouTube ужасна. Видите ли, на YouTube обычно приходят предупреждения. Нет такого, что вы проснулись и внезапно обнаружили, что ваш аккаунт забанен. У авторов видео обычно есть возможность извлечь выгоду из драмы, обратившись к пользователям. Аудитория обычно им сочувствует, в то время как разработчики приложений имеют дело с возмущением юзеров, которые понятия не имеют или не хотят знать, почему нам приходится массово удалять функциональность или снижать производительность наших приложений. Например, разработчик популярного диктофона ACR после удаления разрешения на доступ к журналу вызовов столкнулся с плохими отзывами, злоупотреблениями и ненормативной лексикой от тысяч разгневанных пользователей — и это после обширной кампании, предупреждающей о предстоящих изменениях (как пользователь ACR, я удалил версию Play Store и установил через XDA Labs непривязанную версию, которая сохраняет старую функциональность).

Для независимых разработчиков и небольших компаний разработка под Android стала рискованнее, чем когда-либо. Сегодня я начну работать над проектом, а через шесть месяцев, когда подготовлю первую версию, изменения в политике каталога не позволят его опубликовать или серьёзно повлияют на функциональность… в дополнение к вышеупомянутому пункту об API, которые устаревают и меняют семантику, требуя постоянной поддержки кода, чтобы идти в ногу с последними версиями.

Если вы ходили по ссылкам выше, то поняли ещё кое-что: в Google фактически отсутствует поддержка пользователей живыми людьми, и если бы их боты были такими же отзывчивыми, как Google Assistant… Если это не боты, а люди, то разница не чувствуется: они выплёвывают шаблонные ответы. Широко известно, что лучший способ решения проблем с листингом на Google Play — привлечь внимание сотрудника Google в социальных сетях.

Похоже, уровень поддержки Google зависит от того, насколько громкий шум вы поднимете в социальных сетях. И это экспоненциальная корреляция, потому что большого шума недостаточно, чтобы получить умеренный уровень поддержки; нужно поднять гигантский шум. Это проблема с большинством сервисов Google, особенно если вы не используете G Suite (по-видимому, разработчики приложений не считаются «платными клиентами», когда дело доходит до поддержки). Одна из вещей, которые я хотел бы зарегулировать на государственном уровне, безусловно, это обязательство таких мега-корпораций обеспечивать фактическую поддержку пользователей.

Хотя аналогия YouTube, вероятно, была ошибочной, но здесь есть ещё одна параллель: многие считают, что в последние годы YouTube вносит изменения в бизнес-модели и алгоритмы, благоприятствуя большим, уже известным авторам и затрудняя работу более мелких. Я считаю, что мы наблюдаем аналогичную тенденцию в Google Play Store — просто имейте в виду, что популярность приложения или его «уровень» следует оценивать не по количеству загрузок или активных пользователей, а по объёму комиссионных для Google от рекламы и внутриигровых покупок.


«Android — это open source» стало шуткой ещё пять лет назад. Хотя Android Open Source Project (AOSP) по-прежнему существует, многие действительно важные для конечных пользователей и разработчиков компоненты становятся всё более закрытыми.

Приложения от Google, могут делать то, что сторонним приложениям практически недоступно, благодаря тесному взаимодействию с проприетарным бегемотом, которым является Google Play Services. Это особенно заметно в самом приложении «Google», а также в Google Assistant и лаунчере Google (Google Старт).

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

Cам по себе AOSP эффективно контролируется Google. Этот проект важен, потому что определяет общие API для различных «OEM-версий» Android, так что мы можем разрабатывать для Android, а не для «Samsung Android» или «Nokia Android». Но какие API внедрить, а какие исключить, полностью решает Google. То же самое касается общей архитектуры системы, модели безопасности и т. д. Это означает, что Google может наклонять AOSP как угодно, удалять функции и переносить в проприетарные компоненты что захочет.

Очевидно, что реализация важных функций через Google Play и привязка ОС к компонентам Google важна для удержания контроля над «OEM-сборщиками». Положительный эффект для пользователей и разработчиков заключается в том, что функции и исправления безопасности становятся доступны даже на устройствах, которые не получают обновлений от OEM или получают обновления только для своей версии Android, но не для новой. Отрицательный эффект в том, что указанные изменения в одночасье могут повлиять даже на старые версии Android. Это остаётся полностью на усмотрение Google, также как ограничения приложений в Play Store.

Кажется, Google открывает только необходимый минимум Android, сколько необходимо, чтобы ОС работала на устройствах OEM. Мы не доходим до крайней точки в основном потому, что у самых крупных OEM достаточно рычагов, чтобы предотвратить это. Чувствую, что если бы Google могла сделать Android полностью закрытой системой, то сделала бы это. Интересно, что изменится в будущей операционной системе Fuschia.


У Google два оправдания для изменений в Android и политике Google Play: «безопасность» и «пользовательский опыт», причём последний включает «время автономной работы». Не уверен, для кого Google в последние годы разрабатывает свой «пользовательский опыт», но точно не для «опытных пользователей», таких как я. Впрочем, сначала поговорим о безопасности.

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

Усиление мер безопасности имеет смысл, потому что мы храним в наших телефонах всё более ценную информацию: от «старомодной» приватной информации до биометрических данных, таких как отпечатки пальцев, скан лица и сетчатки глаза. Конечно, Google и прочих, наверное, больше всего заботит охрана доступа к платёжным системам, ключам DRM и так далее.

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

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

На самом деле, всё сводится к выбору пользователя. Android раньше позволял немного пожертвовать безопасностью в обмен на более мощные и инновационные приложения, чем в iOS. Раньше я мог запустить 10 приложений в фоновом режиме и посадить батарею за полдня, но теперь, если я хочу это сделать, то придётся смотреть на 10 текущих уведомлений. Раньше я мог обмениваться файлами между приложениями как на десктопе, но, видимо, это тоже оскорбление для хорошей безопасности. Раньше я мог сканировать сети Wi-Fi каждую минуту, но в Android 9 даже это ограничили несколькими сканированиями в час, убивая некоторые нормальные случаи использования, включая мой дипломный проект. К счастью, в универе мы можем просто притвориться, что последняя версия Android — восьмая.

Смарт-карты, включая SIM-карты, изобрели для контейнеризации защищённой части систем. Аутентификация, аттестация — все функции безопасности должны делаться там, чтобы большая система оставалась менее безопасной и более гибкой. Но в какой-то момент в последние десятилетия несколько компаний решили, что будет лучше (может, для «пользовательского опыта»?) перенести важные операции безопасности в процессор приложений, включая целые бесконтактные платёжные системы. Были разработаны системы вроде SafetyNet. А давайте запретим запускать банковское приложение на рутованном телефоне? Представьте, что интернет-банкинг на десктопе отказался работать, потому что до него дошла информация, что я знаю пароль к учётной записи администратора…

В конце концов, ограничивая нормальные приложения в своём каталоге, Google в итоге поощряет прямую загрузку и установку APK. Это нежелательно с точки зрения безопасности, не нужно объяснять, почему.

Наши телефоны определённо стали безопаснее, но излишняя «безопасность» портит жизнь людям, которые хотят от телефона больше, чем без перерыва смотреть YouTube и проверять свою ленту в социальной сети. Также нужно помнить, что у многих людей смартфон — это единственный компьютер и им нельзя сказать «Просто сделай эту сложную задачу на десктопе». Как насчёт того, чтобы не хранить так много чувствительной информации в телефоне, чтобы мы могли вернуться к прежней гибкости с теми же рисками? Android, пожалуйста, разреши мне выстрелить себе в ногу, как раньше.


Меня бы так сильно не беспокоило это движение Android в сторону широких масс (или понимание Google того, что разрешено делать широкой общественности), если бы существовала жизнеспособная альтернатива мобильной ОС. Но у нас её нет. Есть только iOS от Apple, чья привлекательность с самого начала заключалась в девизе «это просто работает»: безопасная платформа с ограниченной функциональностью, что одновременно ограничивает возможность ошибок. Не сомневаюсь, это находка для большинства пользователей. Но лично мне такая платформа не подходит. Как я уже сказал, дайте мне возможность выстрелить себе в ногу, если я так хочу: дайте мне 2 часа автономной работы, если я того пожелаю, и пусть мои собственные приложения шпионят за моим местоположением, если я им это разрешил.

Ограничения iOS были в порядке, потому что много лет у нас был Android, который позволял делать такие вещи. Так получилось, что благодаря AOSP и отсутствию конкуренции Android оказался де-факто стандартом для каждого смартфона, который не является Apple. Среди недорогих смартфонов Android фактически является единственным вариантом. Конечно, из-за этого рыночная доля Android выросла. Поскольку сейчас «все» его используют, появился соблазн скопировать модель iOS «это просто работает» и навязать безопасность людям, «склонным к членовредительству» — теперь вы не сможете себе повредить, даже если захотите.

Усилия конкурентов Android в лучшем случае смехотворны. Windows Phone / Windows Mobile потерпела неудачу отчасти из-за слабого и, возможно, слишком позднего выхода на рынок, в сочетании с сомнительным «видением» и плохими управленческими решениями со стороны Microsoft. Хотя система Microsoft на самом деле была хорошей, иначе откуда столько убеждённых фанатов WP/WM, но вышла на рынок настолько поздно (и с таким неопределённым будущим), что не смогла привлечь разработчиков, а без топовых приложений платформа не нужна людям, как бы превосходна она ни была с технической точки зрения. Очевидно, проблема ещё в том, что многие из топовых приложений выпускает Google; она выпустила эти приложения для iOS в основном по той причине, что платформа iOS появилась раньше.

Если даже большой игрок с глубокими карманами, как Microsoft, не может представить третью мобильную платформу, то что уж говорить о менее масштабных попытках, таких как Firefox OS. Тут результат вполне предсказуем. У них ещё и дополнительная проблема с поиском железа для запуска. К сожалению, на телефоне нельзя взять и поменять ОС, как на компьютере. В далёком 2015 году я уже жаловался на отсутствие стандартизации в аппаратном обеспечении смартфонов. На самом деле интересно почитать ту статью, когда Android 4.4 был последней версией, и посмотреть, как изменилось моё восприятие Android.

Также должен отметить, что успешная альтернатива Android определённо должна запускать приложения Android, возможно, через слой совместимости. В некотором смысле Android установил стандарт для приложений, как 15 лет назад IE6 диктовал веб-стандарты наихудшим способом. Кто-то сказал антимонопольный?


Таким образом, Google через Android устанавливает стандарт — и реализацию — функциональности современных смартфонов, за исключением случаев, когда Apple представляет крупное нововведение, которое приходится быстро внедрять в Android. Сейчас кажется, что Apple немного тормозит с инновациями, поэтому Google перехватила инициативу, делая Android более похожей на iOS, превращая её в мягкую, ограниченную, безопасную для детей операционную систему, которая связывает руки разработчикам и опытным пользователям.

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

Нам отчаянно нужна альтернатива Android. Но непонятно, кто будет разрабатывать и использовать эту альтернативу. Я знаю только то, что больше не чувствую себя счастливым ни как разработчик Android, ни как пользователь Android, и вообще вряд ли буду рекомендовать Android друзьям и родственникам.

© Habrahabr.ru