Как многопользовательская функция работает с точки зрения путей на Android?

фон

Начиная с версии 4.2, Android поддерживает многопользовательский режим (ссылка здесь и здесь).

У каждого пользователя есть свои приложения, и их личные данные видны только для пользователя.

Вопрос

Как работает инкапсуляция данных на пользователя с точки зрения путей и доступа к файлам?

Я имею в виду, какие будут пути для каждого пользователя для:

  1. личное, внутреннее хранилище.
  2. эмулируемое внешнее хранилище (встроенное внешнее хранилище)
  3. "реальное" внешнее хранилище (SD-карты)

?

Я предполагаю, что пользователи могут видеть данные, хранящиеся на SD-картах, которые принадлежат другим пользователям, но как насчет эмулируемого внешнего хранилища? И могут ли они также записывать файлы других пользователей или просто читать их?

Получает ли каждый пользователь свой особый путь автоматически? или разработчик должен справиться с этим?

Если разработчик должен справиться с этим, что следует использовать в качестве идентификатора пользователя?

В документации сказано:

Независимо от того, какой из этих API вы используете для сохранения данных для данного пользователя, данные не будут доступны при работе от имени другого пользователя.

Но это все, если вы используете API для своего собственного пути. Могут ли приложения каким-то образом обойти это путем перехода на другие пути?

Что может запросить приложение о каждой установке на одном устройстве? Могут ли они получить размер приложений других пользователей? Могут ли они даже получить список приложений других пользователей?

Многократная установка одного и того же приложения также занимает несколько размеров?

1 ответ

какие будут пути для каждого пользователя

Если ты заботишься, ты делаешь это неправильно. Используйте API-интерфейсы Android SDK для определения базовых каталогов и работайте оттуда. Так, например:

  • getFilesDir() вернет правильное место для внутреннего хранилища для текущего пользователя
  • getExternalFilesDir() и методы на Environment вернет правильные места для внешнего хранилища для текущего пользователя

Я думаю, что пользователи могут видеть данные, хранящиеся на SD-картах, которые принадлежат другим пользователям

Это вообще за пределами Android SDK.

а как насчет эмулируемого внешнего хранилища?

Каждый пользователь получает свое место.

И могут ли они также записывать файлы других пользователей или просто читать их?

Кроме того, за исключением ошибок в устройстве.

Получает ли каждый пользователь свой особый путь автоматически?

Да, если вы используете API Android SDK для определения базовых каталогов.

Могут ли приложения каким-то образом обойти это путем перехода на другие пути?

Нет, потому что у них не будет ни прав чтения, ни записи, за исключением ошибок.

Что может запросить приложение о каждой установке на одном устройстве?

AFAIK, ничего. С точки зрения приложения, тот факт, что на одном устройстве имеется несколько установок, неотличим от установки на нескольких устройствах.

Могут ли они получить размер приложений других пользователей?

Я не знаю, что вы подразумеваете под "размером приложений", извините.

Могут ли они даже получить список приложений других пользователей?

Это хороший вопрос. Я не экспериментировал с PackageManager чтобы увидеть, что он показывает при использовании приложениями, запущенными вторичными пользователями. Теоретически, он должен сообщать только о том, что доступно текущему пользователю, особенно с учетом ограниченных профилей Android.

Многократная установка одного и того же приложения также занимает несколько размеров?

АПК и его части, которые распакованы (например, файлы DEX), являются общими, как я понимаю.

Другие вопросы по тегам