[О блоге] [наверх] [пред] [2025-10-03 10:23:04+03:00] [7ec27ac21dd8484c9656cdce9cae95ddb1259e8c]

Разрешения IM-ов

https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie-1pl7
https://habr.com/ru/articles/939006/
Мне тут написали, что Max (f8adaf35c181049ee88a918210e7f9f7b24d4893) не
столь уж много требует для своей работы. Я видел статьи сравнивающие его
хотелки и других популярных IM-ов -- и он не самый "прожорливый".

Но я смотрю со своей колокольни, с позиции Unix-like пользователя. Я
понятия не имею можно ли в Android не давать разрешение программе. Можно
ли подсунуть пустышку например, вместо адресной книги. Не знаю и не хочу
знать, ибо бесполезная информация.

* "Доступ к местоположению" -- для IM-а точно не может быть нужно. Если
  бы я хотел поделиться тем, где нахожусь, то наверное можно бы было
  запустить приложение местоположения, скопировать оттуда координату,
  отправить в сообщении. На той стороне скопировать её аналогично. Иначе
  пришлось бы проверять исходный код на наличие возможности отправки без
  спросу местоположения. Что, я уверен, точно происходит.
* "Просмотр состояния сетевого подключения" -- это допустим ещё
  действительно может быть нужно.
* "Просмотр информации о подключении Wi-Fi" -- чтобы отслеживать
  местоположение, видимо? Не нужно.
* "Возможность работать с аккаунтами на устройстве", "Управление
  аккаунтами на устройстве" -- наверное не очень
  понимаю что это. "Аккаунты" это как пользователи в Windows/Unix? Зачем
  это IM-у?
* "Подключение к сопряженным Bluetooth-устройствам" -- пишут, что
  например для звонков через гарнитуру. Почему IM должен знать как и
  куда выводится звук? Это не его зона ответственности.
* "Рассылка уведомлений для обновления бейджа на иконке" -- хз что это.
* "Доступ к камере для фото и видео" -- чтобы по запросу с сервера он
  мог делать незаметно снимки окружающего? А если я не хочу обмениваться
  таким типом данных, просто хочу текст?
* "Служба для записи или трансляции экран", "Служба для использования
  микрофона", "Служба для использования камеры" -- аналогично
* "Доступ к списку аккаунтов на устройстве", "Чтение списка контактов
  устройства для поиска друзей в мессенджере" -- а не пойти бы ему на три
  буквы? Снова лезть в код, и смотреть не сливаются ли список контактов,
  моих социальных связей? Учитывая объём кода, вряд ли можно будет
  ответить на этот вопрос.
* "Чтение изображений с телефона для отправки в чаты", "Чтение видео
  с телефона для отправки в чаты" -- даже в Windows-ах до Windows XP был
  COM, где программы между собой могли обмениваться через единый RPC/API
  высокоуровневыми объектами. Почему нельзя из "проводника" или там
  "галереи" кинуть объект в IM?
* "READ_SETTINGS (HTC)", "READ_SETTINGS (HUAWEI)" -- а это ещё зачем
  может быть нужно?
* "Запрос на установку пакетов" -- серьёзно? Чтобы одно приложение могло
  ставить другие?

Но по первой ссылке пишут, что многие разрешения устарели, ни на что не
влияют. Передавать файлы можно только через разрешения чтения всякой
медиа информации (что не отменяет моего не понимания, но может так
Android отвратно (а как же ещё?) устроен). А как я это всё могу
проверить? Исходный код Android читать? Для меня, пользователя командной
строки, всё это выглядит как жуткая дикость, где почти всё не имеет
права на существование для задач IM. А Max, похоже, ничем не хуже всех
остальных, даже менее требователен.

    [оставить комментарий]
    комментарий 0:
    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.
    
    комментарий 1:
    From: Sergey Matveev
    Date: 2025-10-03 17:17:45Z
    
    *** kmeaw@kmeaw.com [2025-10-03 10:22]: [...]
    В общем, типа не настолько всё страшно.
    И тем более становятся беспочвенны наезды на Max на эту тему.