Accessibility API предусматривают работу через специальный сервис в системе Accessibility Service (a11y). Чтобы получить возможность отправлять ему для обработки определённые события, приложение должно добавить в манифест разрешение
android.permission.BIND_ACCESSIBILITY_SERVICE
. Этот сервис может обрабатывать определённые события в системе (жесты, нажатия клавиш) раньше, чем другие приложения. Кроме того, этот сервис может сам внедрять определённые события KeyEvents, такие как нажатия кнопки «Вернуться назад», кнопки разделения экрана и так далее.Из описания функциональности Accessibility Service понятно, что сервис исключительно полезен в разработке интерфейса мобильного приложения. Вот лишь небольшой список приложений, которые используют функциональность для инвалидов в своём интерфейсе:
- AutoInput
- Button Mapper
- Greenify
- Inputting+
- LastPass
- Swiftly Switch
- Tasker
- Type Machine
Например, на скриншоте внизу показано, как приложение LastPass запрашивает разрешение на использование функции для инвалидов, чтобы активировать функцию автозаполнения паролей в других приложениях Android.
Ни одно из вышеперечисленных приложений не использует службу a11y в соответствии с документацией Google, везде реализованы своеобразные читы. Скорее всего, абсолютное большинство приложений в Google Play, которые используют функции для инвалидов, на самом деле разработаны для вполне себе здоровых людей. До сих пор ни у кого не возникало проблем с этим, потому что Google не накладывала ограничений, как можно использовать API. Сейчас ситуация изменилась.
В письмах от Google сказано, что разработчики обязаны привести свои программы в соответствие с документацией по Accessibility Service, то есть исключить из приложений любую функциональность, не направленную непосредственную на помощь людям с ограниченными возможностями. Разработчики обязаны сделать это в течение 30 дней, иначе их приложения будут удалены из Play Store. Отказ подчиниться требованию означает также нарушение правил пользования сервисом, что может привести к блокировке аккаунта разработчика.
В качестве варианта Google рекомендует самостоятельно удалить своё приложение из каталога, чтобы не рисковать блокировкой аккаунта.
Для тех немногочисленных приложений, которые действительно помогают людям с ограниченными возможностями, рекомендуется добавить ясное объяснение для пользователя, зачем требуется получение разрешения на использование этого сервиса. В описание программы на сайте Google Play следует добавить фразу “This app uses Accessibility services”.
Ребята с XDA-Developers пытаются предположить, почему Google пошла на такие репрессивные меры. С одной стороны использование Accessibility Service вызывает небольшой лаг в интерфейсе, но вряд ли причина в этом. Скорее всего, Google беспокоится, что этот системный сервис начнут массово использовать вредоносные программы. Из его функциональности понятно, что он отлично подходит для скрытой записи нажатий клавиш (для кейлоггеров), фишинговых эксплоитов и прочих вредоносов. Если для пользователей активация Accessibility Service на устройстве станет привычной рутиной, то это угрожает их безопасности.
Уже зарегистрировано несколько случаев, когда вредоносному приложению удавалось обманным путём склонить пользователя активации Accessibility Service (см. информацию об эксплоите Cloak & Dagger).
Комментарии (54)
zaro000
14.11.2017 20:06Собираюсь написать письмо в Европарламент, с предложением запретить Google и другим рекламным компаниям использовать вычислительные мощности и накопители компьютеров (стационарных и мобильных, включая смартфоны) для сбора, хранения и передачи информации, для начала, о предпочтениях пользователей. Мотив такой, что во-первых, человек приобретая смартфон не приобретает обязательства предоставлять свои мощности для сторонних вычислений, в противном случае это должно оплачиваться компанией, а во-вторых можно надавить на экологический аспект, мол это не экологично тратить столько энергии и евро. Просто я не понимаю, зачем, когда я покупаю себе смартфон, там установлен маркет, сервисы гугл, карты, почтовый сервис и обязательно требуется создавать аккаунт на гугле, это очень не удобно, вынужден выбирать себе смартфоны из совместимых и поддерживаемых проектами, где гугл апсов нет в прошивке.
zaro000
14.11.2017 20:31Не, ну действительно, я покупаю телефон, а не рекламный билборд себе в карман за свои же деньги. Зачем мне на нем гугл маркет, зачем мне отправлять тут же какую-то информацию в гугл? Хочешь, что бы я смотрел рекламу и выступал тестером их ПО — плати деньги гугол. Каждый тактовый сигнал процессора оплачивается из кармана пользователя, каждое обращение к памяти стоит денег, который уже итак заплатил за устройство и ПО деньги.
Alex_ME
14.11.2017 20:54Я тоже не люблю рекламу, передачу каких-то данных и кучу фоновых сервисов, которые тормозят мой, и без того слабый, смартфон.
Но пользователи пользуются различными сервисами Google — поиском, картами, почтой, голосовым поиском, которые затрачивают ресурсы Google, и при этом пользователи за них не платят явно.
redmanmale
14.11.2017 21:51пользователи пользуются различными сервисами Google
Вот и пусть с ними Google разбирается. А тех, кто не пользуется, это не должно касаться.
ploop
14.11.2017 21:14Зачем мне на нем гугл маркет
Не покупайте. Покупаете — значит соглашаетесь.
Купите китайца, накатите кастомную прошивку, напишите своё ПО… В чём проблема?
kozhevnikovv
14.11.2017 21:55В отличии от своих главных конкурентов, андроид это открытая система и у пользователя есть полная свобода выбора — при должном упорстве хоть из исходников собирай себе систему. Вы лукавите — у вас огромный выбор устройств с разным набором железа и софта.
> плати деньги гугол
вам и «платят» предоставляя бесплатно сервисы почты, карт, синхронизации, etc.zaro000
14.11.2017 22:08Я ими не пользуюсь от слова совсем, но у меня смартфон Нексус 5X, брал только потому что они кастомизируются сообществом очень активно. Вот такой вот парадокс, больше никаких преимуществ нет. Просто я не понимаю, почему не продают смартфоны без гапсов и прочего, кому нужен только смартфон или даже просто телефон с камерой, с возможностью каким-нибудь простым способом установить весь вендорский контент кому это необходимо, либо с возможностью легко очистить прошивку для тех, кому совсем не нужно, если сделать скидку гуглу и вендорам.
kozhevnikovv
14.11.2017 22:16Так а в чем тогда претензия? Накатывайте циаген без гуглоприложений, корпорация добра не принуждает никого пользоваться своей инфраструктурой. Я фанат экосистемы гугла, позвольте мне делать свой выбор.
DrZlodberg
15.11.2017 08:59Вот только циан есть на дай бог 1% от всех телефонов (подозреваю — это сильно оптимистичный взгляд). Т.е. покупай ещё и телефон, который ему подходит. Но не подходит мне. Такие вот пироги.
На самом деле весь (почти) гуглмусор можно снести и из обычного телефона (потратив некоторое время после каждого большого обновления), Но вот переключения треков кнопкой громкости, так радовавшее на циане, в нём завести так и не удалось. Хочется мучительно убить каждого, кто считает, что лучше меня знает, что мне удобно делать со своей вещью. А тем более — что мне НЕЛЬЗЯ делать со своей вещью.
asmrnv777
15.11.2017 00:48Просто я не понимаю, почему не продают смартфоны без гапсов и прочего, кому нужен только смартфон или даже просто телефон с камерой, с возможностью каким-нибудь простым способом установить весь вендорский контент кому это необходимо, либо с возможностью легко очистить прошивку для тех, кому совсем не нужно, если сделать скидку гуглу и вендорам.
Потому что это нужно тысяче-другой пользователей, а гаппсы нужны большинству. Соответственно, логично будет создать неудобства для тысячи юзеров, а не для сотен миллионов.
KOLANICH
14.11.2017 22:37Никакая она не открытая — без проприетарных блобов от копирастов большинство устройств не заработает. А ещё из-за этих блобов нельзя обновить ядро. Из-за этих блобов на legacy устройствах не будет новой версии андроида, а будет только старая и уязвимая. Спасибо копирастам и Л
иайнусу и потреб****м, регулярно покупающим новые телефоны, за всё это. Пока большинство устройств не будут полнофункциональны на свободных драйверах (в случае отсутствия свободного драйвера считаем, что свободный драйвер — пустой файл), платформу нельзя назвать открытой.
kozhevnikovv
14.11.2017 22:40Давайте отделим котлеты от мух. Гугл вам открыл операционную систему. Вы можете требовать открытия блобов от производителей устройств — голосуйте рублем. Пока что большинство голосуют против вас.
RedCatX
15.11.2017 01:26Проблема в том, что смартфонов без блобов вообще не существует, а значит голосовать рублём тоже довольно проблематично…
quwy
15.11.2017 03:52Хм, вот интересно, у меня в семерке работают некоторые драйвера от XP. И это не нонсенс, а вполне закономерная ситуация. И пофиг, что ядро сменилось уже раз десять, а драйвера при этом — те же блобы.
Не выпендривались бы, сделали наконец бинарную совместимость, и прблема сразу стала бы на порядок менее актуальной. Но нет же, швабодка, блин, опасносте.DaemonGloom
15.11.2017 14:02Проблема в том, что «некоторые». Их, на самом деле, очень мало таких. Большинство тех, что работают и на старых ОС, и на новых — были написаны после внедрения новой модели драйверов (после выхода Vista). При этом всё, что является действительно системным — даже в пределах разных сервис-паков одной ОС может не работать легко.
alsii
15.11.2017 18:08Я вот тоже самое про телевизор думаю… Может добавите в свое обращение и про телерекламу?
Honeyman
15.11.2017 02:39«Запретить использовать вычислительные мощности для сбора, хранения и передачи информации о предпочтениях пользователей».
А что, интересная идея.
Только попробуйте сначала на себе, пожалуйста. Проверить этот сценарий на удобство достаточно легко — просто каждый раз, когда берёте телефон, чтобы что-нибудь сделать, выполняйте перед тем, что планировали, factory reset.
chesterset
15.11.2017 11:17А Гугл тут причем? Он вам телефон продал что ли? Производитель смартфона решил, что на свой аппарат он хочет накатить android с сервисами Гугл, заключил с Гугл док, предустановил все и продает вам конечное изделие. Вы вправе не покупать его, а производитель вправе не подстраивать свой массовый товар под вас и все довольны.
Retifff
15.11.2017 13:47и обязательно требуется создавать аккаунт на гугле
Не создавайте, никто не заставляет. Устанавливайте программы из .apk.
darthmaul
15.11.2017 17:53Ведроид же бесплатный, поэтому какие могут быть претензии? А вендор смартов
wickated
16.11.2017 09:26Скачиваете себе АОСП андроид без сервисов гугла, пишете себе драйвера под свое оборудование, пользуетесь. Проблемы с чем-то? Тогда оплачивайте готовые изделия.
konst90
14.11.2017 20:08Если из читалки пропадет перелистывание страниц клавишами громкости — будет печально.
Sdima1357
14.11.2017 21:01+1и кнопки на пульте от андроид tv-box переназначать не получится :(
API на кнопки все равно нужен. Возможно гуглу стоит лучше проверять приложения, прежде чем их подписыватьDrZlodberg
15.11.2017 09:09Для меня вообще загадка, почему программа, выводящая звук не может штатно работать с кнопками громкости. Я могу ещё понять полный системный перехват, но тут то почему?
Levhav
16.11.2017 02:23А для меня загадка зачем вообще этот вопрос контролировать. Если приложение плохое его пользователь может удалить. Если не удалил то значит оно ему нужно без каких либо средств контроля со стороны гугла.
DrZlodberg
16.11.2017 08:23В комментариях уже приводили примеры. Это могут быть и два хороших, перехватывающих одну и ту же клавишу. И мешающих друг другу. Просто нужно корректно разрешать такие ситуации, а не тупо всё запрещать.
OKyJIucT
14.11.2017 22:28Можно же просто отключить обновления и пользоваться старой версией приложения, где этот функционал доступен.
Lertmind
14.11.2017 23:31Вообще-то, в нормальных читалках (EBookDroid, Cool Reader и т. д.) не используется этот API, так как в любом приложении можно обрабатывать нажатия клавиш громкости без запроса специальных разрешений (KeyEvent). Если вас сбило упоминание gReader, то оно вероятно делает что-то хитрое.
k12th
15.11.2017 12:02Интересно, что в читалке от Google Play Books тоже работает перелистывание громкостью. Интересно, это через a11y API сделано или все-таки есть штатный способ?
Zombieff
14.11.2017 20:27Прочитав заголовок, в первую очередь думаешь: «Опять пользователей ущемляют по каким-нибудь дурацким причинам!»
А на деле — инициатива оправданная. Помимо того, что это можно использовать во вред (см. первый коммент под статьёй тут), можно нарушить работу других сервисов, которые нужны для accessibility. Например, если аппаратные кнопки заменяют кому-то стандартные действия на экране, а приложение их перехватывает — можно вообще оказаться в полной… кхм… филейной части.
Не знаю, насколько актуально именно для этой клавиши, но из-за повреждённого экрана знакомой включил на её телефоне завершение звонка по кнопке питания. Если бы вместо этого использовалась клавиша громкости, например (как для снимков в приложении камеры), то тут точно бы оно сломалось многими приложениями.
Кстати говоря, что насчёт снимков клавишей громкости? У самого гугла это стандартная фича, если не ошибаюсь.
BeppeGrillo
14.11.2017 20:40Да, а ничо что приложение надо добавлять в accessibility ручками чтобы оно заработало?
DrZlodberg
15.11.2017 09:12А не судьба просто запрещать СОВМЕСТНЫЙ перехват кнопок? Какая может быть проблема, если они перехватываются только одной программой? А если появляется второй желающий — просить явно выбрать того, кому можно. Но нет, давайте просто запретим…
0o0
14.11.2017 23:42У меня четверть программ с рут доступом, так что не испугать какими-то там «рисовать поверх окон». Но вообще странно, зачем алиекспрессу или фаерфоксу к примеру эти права. Не припомню, что бы они что-то поверх других приложений рисовали.
Mr4Mike4
15.11.2017 05:53Не понятно, что в итоге делать. Моё приложение тоже использует функции для инвалидов: на android < 4.4 считывает уведомления и отправляет их на комп. Получается теперь придётся отказываться от поддержки старых версий системы.
OlegYch_real
15.11.2017 05:53думаю этот апи и так сделан абы было, и гуглу глубоко фиолетово будет его кто-то использовать или нет
а вот если действительно появится вредоносная программа, то пиар будет не самым лучшим, поэтому в перспективе его просто выпилят
такая вот открытая система
burbilog
15.11.2017 12:02Блин. Только появилась (благодаря именно этому API) НУЖНЕЙШАЯ утилита, позволяющая листать кнопками громкости везде, а не в редких (и не тех, что нужно) приложениях, как тут же выпиливают :(
Такое ощущение, что фичу листания кнопками маркетолухи гугла специально придерживают на черный день, чтобы было что с помпой показать, если дела плохо пойдут…faiwer
15.11.2017 13:25Только появилась … как тут же выпиливают
Не думаю, что отсутствие приложения в GooglePlay должно являть для вас вселенскую проблему. Скорее всего авторы выложат (или уже) его куда бы то ни было ещё. Когда нужное приложение по тем или иным соображениям не попадает в GooglePlay — рядовое явление.
burbilog
15.11.2017 14:39Не думаю, что отсутствие приложения в GooglePlay должно являть для вас вселенскую проблему.
Мне — нет. Но вот сейчас я могу объяснить человеку по телефону, как эту штуку поставить. А если выпилят из маркета, то даже не буду пытаться. Я понимаю, что с точки зрения некоторых люди-неспециалисты вообще не люди и должны страдать, но, на мой взгляд, это поганая точка зрения.
И сдается мне, что следующим шагом по выпилу будет выдача этого API по персональному разрешению от гугла, разумеется, во имя добра и света. А вы продолжите говорить «да ну, не проблема». Ну да, если рутануть, не проблема. Следующая итерация…
alix_ginger
15.11.2017 13:43Если есть люди, которым неудобно листать скроллом по экрану, то наверное, это приложение использует API добросовестно
DaemonGloom
15.11.2017 14:11А как вы в таком случае регулируете громкость?
Ну и если у вас есть рут — всегда можно переназначить кнопки. И вместо действий VOLUME_UP/VOLUME_DOWN повесить туда PAGE_UP/PAGE_DOWN. Более подробная информация — source.android.com/devices/input/key-layout-filesburbilog
15.11.2017 14:30А как вы в таком случае регулируете громкость?
Там можно задать, в какой программе громкость, а в какой программе скрол. И это ОЧЕНЬ удобно, т.к. скролл нужен в конкретных программах. Скажем, та же Опера не поддерживает скролл кнопками и без кнопок читать длинные тексты в ней дьявольски неудобно, а единственная альтернатива ей, умеющая так же хорошо масштабировать любой блок текста на странице под ширину экрана — это UC Browser. В котором есть свой скролл, но к нему последнее время прилагается тонна уродской рекламы и дикие тормоза всего телефона, с большим облегчением снес его. Даже Greenify не помогал.
Ну и если у вас есть рут — всегда можно переназначить кнопки. И вместо действий VOLUME_UP/VOLUME_DOWN повесить туда PAGE_UP/PAGE_DOWN.
А это, увы, не годится, ибо убивает возможность регулировать громкость там, где надо. Этим я баловался еще на 2.x андроидах. Неудобно.
zaro000
15.11.2017 13:17Кстати, когда бегаешь с смартфоном очень не удобно залитый потом экран отрабатывает касания. Удобнее кнопками.
ReakTiVe-007
15.11.2017 20:37а не проще было все перевести на пользователя, мол смотрите сами, если доверяете приложению и разрабу, разрешайте пользоваться инвалидо-апи, а если вас обманули и что то украли, то сам дурак. Как уже упомянули выше с версии ведра 6.0 и выше(или я шо та напутал) можно отключать нужные разрешения в нужных приложениях.
wickated
16.11.2017 09:39В миуи по дефолту запрешен показ оверлеев. И это на уровне оболочки, версия андроида не влияет. Т.е. Гугл сам может сделать разрешение для данной функции "видимым", но не хочет пока что.
dartraiden
Демонстрация атак с использованием этих служб. Ни один из испытуемых пользователей даже не понял, что происходит что-то не то.
Поэтому, у меня есть привычка отзывать у приложений доступ к функциям, которые мне не требуются.
Teomit
Можете подсказать с помощью чего вы отзываете у приложений доступ к ненужным функциям?
Impuls
Начиная с Android 6 появилась возможность давать разрешение для приложения.
https://www.kaspersky.ru/blog/android-permissions-guide/14099/
Stanislavvv
В старых версиях андроида при наличии рута можно воспользоваться LBE Privacy Guard или поставить XPosed + XPrivacy.
Оба способа более-менее работают, во втором — больше возможностей и геморроя.