From: kmeaw
Date: 2025-10-03 10:21:24Z
В Android есть своя реализация многопользовательской среды - у одного
устройства может быть несколько пользователей. В точки зрения Unix-like
пользователя, в момент установки приложения (a141) конкретным
Android-пользователем (u0) в системе появляется учётная запись вида u0_a141 с
уникальным UID.
Современные версии ОС умеют давать scoped доступ к адресной книге,
неструктурированным файлам (то, что раньше было /sdcard), галерее изображений
(камера, скриншоты), музыке, директории Downloads. Более старые версии
позволяют достичь схожего эффекта путём переключения Android-пользователей, что
хоть и быстрее перезагрузки, но всё равно не очень удобно.
> Иначе пришлось бы проверять исходный код на наличие возможности отправки без
> спросу местоположения.
В момент вызова соответствующего API пользователю задают вопрос - хотите ли вы
дать доступ такому-то приложению к местоположению. И есть три варианта ответа -
"да, и для всех последующих запросов", "да, пока я не закрою приложение" и
"нет". Каждый раз при обращении к этому API на несколько секунд появляется
точка в верхнем-правом углу. Если у аппарата есть соответствующий светодиод,
то и он будет зажигаться.
> "Просмотр состояния сетевого подключения"
Это запрос у ConnectivityManager текущего состояния - есть ли связность с
Интернетом, по каким каналам, включены ли радиомодули, последняя ошибка
подключения (если есть) и является ли трафик платным. На изменение этого
состояния приложение может подписаться и просыпаться каждый раз, когда
оно изменилось.
> "Аккаунты" это как пользователи в Windows/Unix?
Это как менеджер секретов - несколько приложений могут пользоваться одной
учётной записью Google, Яндекса, Mail.ru для доступа к соответствующим онлайн
сервисам.
> "Подключение к сопряженным Bluetooth-устройствам"
Обычно нужно для включения/выключения Bluetooth, что влияет на точность
геолокации.
> "Рассылка уведомлений для обновления бейджа на иконке"
Позволяет рисовать overlay поверх иконки в launcher. Обычно используется
для индикации наличия или числа событий, требующих внимания пользователя,
чтобы привлечь его к запуску activity.
> чтобы по запросу с сервера он мог делать незаметно снимки окружающего?
Незаметно не получится, тут аналогично отправке местоположения всё работает.
Пользователю зададут вопрос, и даже если он разрешит доступ к камере навсегда,
система будет показывать цветную точку в углу экрана.
> Почему нельзя из "проводника" или там "галереи" кинуть объект в IM?
Можно, причём это правильно работает, даже если нужного объекта нет в
разрешённом scope.
> "READ_SETTINGS (HTC)", "READ_SETTINGS (HUAWEI)"
Чтобы рисовать overlay поверх иконки в нестандартных launcher'ах.
> "Запрос на установку пакетов" -- серьёзно? Чтобы одно приложение могло
> ставить другие?
Само оно ставить другие не сможет. Это разрешение позволяет закинуть
пакет в staging area, а потом средствами ОС предложить пользователю
установить этот пакет. Обычно используется для реализации независимого
от Google механизма обновления, либо альтернативными "магазинами" типа
F-Droid.
> Передавать файлы можно только через разрешения чтения всякой
> медиа информации ... А как я это всё могу проверить?
Исторически в Android есть помойка (/sdcard) для пользовательских файлов, куда
раньше монтировалась физически вставленная карта. Сейчас карты уже нет, и это
что-то вроде bind mount в /storage/emulated/0/ (где 0 - ID текущего
Android-пользователя). На эту директорию стоят unix permissions, позволяющие её
читать группе sdcard_r и писать группе sdcard_w, так что можно просто
посмотреть список групп, в которые входит тот unix-пользователь, который
создался в момент установки приложения.
В GrapheneOS (форк Android) сделали песочницу для сервисов Google, которая
создают иллюзию наличия прав у сервиса, но при попытке вызвать
привилегированный API либо выбрасывается исключение, либо возвращается
заглушка, либо (редко) выполняется какой-то совсем другой код. Тот же подход
применим и к другим приложениям, если написать соответствующий
gmscompat_config.