Учитывая, что каждое приложение работает как отдельный пользователь, что произойдет, если вы захотите добавить новую учетную запись пользователя?

В соответствии с этим каждое приложение в Android работает как отдельный пользователь уровня ядра с уникальным идентификатором пользователя и идентификатором группы.

Итак, что происходит внутри, когда вы добавляете нового пользователя (например, на ваш общий планшет)?

Насколько я помню, каждая задача представляет собой приложение, которое запускается как отдельный «пользователь» в ядре под общим пользователем, который вошел в систему. Это означает, что существует много «ПОЛЬЗОВАТЕЛЕЙ», как и у реальных людей с учетными записями, но уровень ядра stuff — это виртуальный пользователь, а не реальный человек или пользователь планшета/устройства, а абстрактный изолированный процесс. Это проблема безопасности/конфиденциальности. Добавление еще одного профиля пользователя просто добавляет еще один слой. Вы будете пользователем1 с большим количеством приложений, работающих под виртуальными «пользователями», а у пользователя2 будут свои приложения, работающие под виртуальными пользователями. Слово «пользователь» сбивает с толку.
Не путайте «пользователей ОС» с профилями/учетными записями пользователей . Функция «Многопользовательский режим», добавленная в JellyBean, использует профили для разных учетных записей, а не для пользователей ОС. Две совершенно разные пары обуви.

Ответы (2)

Идентификаторы пользователей Linux , которые Android использует для изоляции приложений друг от друга, совершенно не связаны с профилями пользователей на планшетах Android 4.2.

В Android каждое приложение получает собственный каталог для сохранения данных. Система идентификаторов пользователей Linux используется для того, чтобы приложения не могли читать данные друг друга. Но все эти каталоги данных находятся внутри одного каталога в файловой системе, /data/user/0. Допустим, первого пользователя зовут Абулурд, и он устанавливает приложение Showr. Ему может быть присвоен идентификатор пользователя 1004 и каталог /data/user/0/com.shadowburst.showr.

Теперь предположим, что вы создаете новый профиль пользователя для Беатрис. Она получает новый каталог /data/user/1, который начинается пустым. Когда она входит в устройство и устанавливает Showr, оно не загружает приложение снова (поскольку установщик приложения Android знает, что файл APK уже находится на устройстве), но создает новый идентификатор пользователя 1007 (например). и новый каталог /data/user/1/com.shadowburst.showr.

Android использует разрешения файловой системы Linux и различные идентификаторы пользователей Linux не только для того, чтобы убедиться, что Showr Абулурда не может прочитать данные других приложений Abulurd, но также и для того, чтобы Showr Абулурда не смог прочитать данные Showr Беатрис. Два экземпляра Showr работают в разных процессах с разными идентификаторами пользователей.

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

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

Параллельный пост :) Проще говоря, можно ли сравнивать профили с запуском разных ВМ на одном хосте с использованием своего рода «общего хранилища»?
Нет. Виртуальная машина будет иметь собственное ядро.
Таким образом, если человек устанавливает приложение и оно назначается идентификатору пользователя, например, app_143, а затем создает другой профиль пользователя и повторно запускает приложение с активным профилем пользователя в какой-то момент, может быть создан другой идентификатор пользователя, например app_265, для того же приложения?
@galegosimpatico Да, именно так. Не забывайте, что приложение должно быть установлено для нового профиля пользователя, прежде чем оно сможет работать.
Спасибо. Вы говорите, что он не загружает приложения дважды, потому что установщик знает, что файл APK уже находится на устройстве. Ну не скачивает, а переустанавливает приложение (по требованию другого профиля)? Разве некоторые «двоичные файлы» не могут быть разделены между всеми пользователями? (для переустановки действительно тяжелых или больших приложений)
@Reflection Да, он устанавливает приложение в новый профиль пользователя. Это не означает, что он копирует APK, он просто создает новые идентификаторы пользователей и новый каталог данных (и менеджер пакетов помещает примечание в свои пользовательские данные, чтобы сказать, что приложение установлено для этого пользователя). Даже если приложение большое, оно займет лишь немного дополнительного места, если только приложение не загрузит какой-нибудь большой файл в свой личный каталог данных при первом запуске.
Итак, в каком каталоге находятся фактические «исполняемые файлы» приложения? И какой пользователь уровня ядра является владельцем этих файлов? У кого есть доступ и права на чтение и запись к этим файлам?
APK-файл является исполняемым файлом. Есть несколько каталогов, в которых могут находиться APK-файлы. Они принадлежат systemпользователю и доступны для чтения всем. Если есть что-то конкретное, что вы хотите узнать о системе, задайте новый вопрос.

Что происходит, когда вы добавляете новую учетную запись пользователя, так это то, что создается новая учетная запись (или «Профиль пользователя»). Это не имеет никакого отношения к управлению пользователями/группами на уровне ОС. Вы заметите, что в большинстве практических руководств (например , в этом на HowToGeek ) говорится об учетных записях , поскольку термин «пользователь» может ввести в заблуждение.

Я не Android-разработчик, поэтому я не могу дать вам более глубокое техническое объяснение. Но, насколько мне известно, многопользовательская функция реализована поверх ядра Linux (т.е. в Java/Dalvik). РЕДАКТИРОВАТЬ: Дэн опубликовал свой ответ одновременно с моим, так что смотрите техническую информацию :)