Dado que cada aplicación se ejecuta como un usuario independiente, ¿qué sucede cuando desea agregar una nueva cuenta de usuario?

De acuerdo con esto , cada aplicación en Android se ejecuta como un usuario independiente a nivel de kernel, con una ID de usuario y una ID de grupo únicas.

Entonces, ¿qué sucede bajo el capó cuando agrega un nuevo usuario (por ejemplo, a su tableta compartida)?

Si recuerdo esto, cada tarea es una aplicación que se ejecuta como un 'usuario' separado en el kernel, bajo el usuario general que ha iniciado sesión. Eso significa que hay muchos 'USUARIOS' como personas reales con cuentas, pero el nivel del kernel stuff es un usuario virtual, no una persona real o un usuario de la tableta/dispositivo, sino un proceso abstracto aislado. Es un problema de seguridad/privacidad. Agregar otro perfil de usuario humano solo agrega otra capa de esto. Usted será el usuario 1 con muchas aplicaciones ejecutándose bajo 'usuarios' virtuales, y el usuario 2 tendrá sus aplicaciones ejecutándose bajo usuarios virtuales. La palabra 'usuario' es confusa.
No confunda "usuarios de sistema operativo" con perfiles/cuentas de usuario . La función "Multiusuario" agregada con JellyBean usa perfiles para diferentes cuentas, no para usuarios del sistema operativo. Dos pares de zapatos completamente diferentes.

Respuestas (2)

Los ID de usuario de Linux que usa Android para aislar las aplicaciones entre sí no tienen ninguna relación con los perfiles de usuario en las tabletas con Android 4.2.

En Android, cada aplicación tiene su propio directorio para guardar datos. El sistema de ID de usuario de Linux se usa para asegurarse de que las aplicaciones no puedan leer los datos de otras. Pero todos estos directorios de datos están dentro de un directorio en el sistema de archivos, /data/user/0. Digamos que el primer usuario se llama Abulurd e instala la aplicación Showr. Es posible que se le proporcione el ID de usuario 1004 y el directorio /data/user/0/com.shadowburst.showr.

Ahora, supongamos que crea un nuevo perfil de usuario para Beatrice. Obtiene un directorio nuevo, /data/user/1, que comienza vacío. Cuando inicia sesión en el dispositivo e instala Showr, no vuelve a descargar la aplicación (porque el instalador de la aplicación de Android sabe que el archivo APK ya está en el dispositivo), pero crea una nueva identificación de usuario 1007 (por ejemplo), y un nuevo directorio /data/user/1/com.shadowburst.showr.

Android usa los permisos del sistema de archivos de Linux y las diferentes ID de usuario de Linux, no solo para asegurarse de que Abulurd's Showr no pueda leer los datos de las otras aplicaciones de Abulurd, sino también que Abulurd's Showr no pueda leer los datos de Beatrice's Showr. Las dos instancias de Showr se ejecutan en diferentes procesos, con diferentes ID de usuario.

Si está familiarizado con la terminología de Linux, crear un nuevo perfil de usuario es similar a usarlo chrooten el dispositivo para obtener una parte aislada del sistema de archivos para ejecutar aplicaciones.

Lo que he descrito es el proceso habitual, pero así como el mismo desarrollador (firmado con la misma clave) puede escribir aplicaciones para compartir un directorio de datos con otras aplicaciones, Android les da a las aplicaciones la oportunidad de decir que funcionan con múltiples usuarios. De esta forma, se puede escribir una aplicación para que tenga un proceso para todos los perfiles de usuario, para permitirles compartir datos o realizar alguna función especial. La pantalla de bloqueo tiene que funcionar de esta manera, por ejemplo, porque todos los perfiles de usuario comparten una aplicación de pantalla de bloqueo, que tiene que leer la configuración de la pantalla de bloqueo de todos los usuarios.

Publicación paralela :) Para ponerlo en términos más sencillos, ¿se pueden comparar los perfiles con la ejecución de diferentes máquinas virtuales en el mismo host, utilizando una especie de "almacenamiento compartido"?
No. Una VM tendría su propio kernel.
Entonces, si una persona instala una aplicación y se le asigna la identificación de usuario, por ejemplo, app_143, y luego crea otro perfil de usuario y vuelve a ejecutar la aplicación con ese perfil de usuario activo en algún momento, ¿se puede crear otra identificación de usuario, por ejemplo, app_265 para la misma aplicación?
@galegosimpatico Sí, eso es exactamente. No olvide que la aplicación debe instalarse para el nuevo perfil de usuario antes de que pueda ejecutarse.
Gracias. Dices que no descarga aplicaciones dos veces porque el instalador sabe que el archivo APK ya está en el dispositivo. Bueno, no lo descarga, pero ¿reinstala la aplicación (a pedido de otro perfil)? ¿No se pueden compartir algunos "binarios" entre todos los usuarios? (para reinstalaciones de aplicaciones realmente pesadas o grandes)
@Reflection Sí, instala la aplicación en el nuevo perfil de usuario. Esto no significa que copie el APK, solo crea nuevas ID de usuario y un nuevo directorio de datos (y el administrador de paquetes pone una nota en sus datos de usuario para decir que la aplicación está instalada para ese usuario). Incluso si la aplicación es grande, solo ocupa un poco de espacio adicional, a menos que la aplicación descargue un archivo grande en su directorio de datos privados cuando la ejecuta por primera vez.
Entonces, ¿en qué directorio están los "ejecutables" reales de la aplicación? Y, ¿qué usuario a nivel de kernel es el propietario de estos archivos? ¿Quién tiene acceso y permisos de lectura y escritura a estos archivos?
El archivo APK es el ejecutable real. Hay algunos directorios en los que pueden vivir los archivos APK. Son propiedad del systemusuario y se pueden leer en todo el mundo. Si hay algo específico que desea saber sobre el sistema, publique una nueva pregunta.

Lo que sucede cuando agrega una nueva cuenta de usuario es que se crea una nueva cuenta (o "Perfil de usuario"). Esto no tiene nada que ver con la administración de usuarios/grupos en el nivel del sistema operativo. Notará que la mayoría de los procedimientos (por ejemplo, este en HowToGeek ) hablan de cuentas , ya que el término "usuario" sería bastante engañoso.

No soy un desarrollador de Android, así que no puedo darte una explicación técnica más profunda. Pero hasta donde yo sé, la función multiusuario se realiza sobre el núcleo de Linux (es decir, en Java/Dalvik). EDITAR: Dan publicó su respuesta al mismo tiempo que yo la mía, así que vea allí los antecedentes técnicos :)