В соответствии с этим каждое приложение в Android работает как отдельный пользователь уровня ядра с уникальным идентификатором пользователя и идентификатором группы.
Итак, что происходит внутри, когда вы добавляете нового пользователя (например, на ваш общий планшет)?
Идентификаторы пользователей 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 дает приложениям возможность сказать, что они работают с несколькими пользователями. Таким образом, приложение может иметь один процесс для всех профилей пользователей, чтобы они могли обмениваться данными или выполнять некоторые специальные функции. Например, экран блокировки должен работать таким образом, потому что все профили пользователей используют одно приложение экрана блокировки, которое должно считывать настройки экрана блокировки всех пользователей.
system
пользователю и доступны для чтения всем. Если есть что-то конкретное, что вы хотите узнать о системе, задайте новый вопрос.Что происходит, когда вы добавляете новую учетную запись пользователя, так это то, что создается новая учетная запись (или «Профиль пользователя»). Это не имеет никакого отношения к управлению пользователями/группами на уровне ОС. Вы заметите, что в большинстве практических руководств (например , в этом на HowToGeek ) говорится об учетных записях , поскольку термин «пользователь» может ввести в заблуждение.
Я не Android-разработчик, поэтому я не могу дать вам более глубокое техническое объяснение. Но, насколько мне известно, многопользовательская функция реализована поверх ядра Linux (т.е. в Java/Dalvik). РЕДАКТИРОВАТЬ: Дэн опубликовал свой ответ одновременно с моим, так что смотрите техническую информацию :)
РоссК
Иззи