Pytanie:
Biorąc pod uwagę, że każda aplikacja działa jako oddzielny użytkownik, co się dzieje, gdy chcesz dodać nowe konto użytkownika?
Reflection
2014-01-27 18:07:40 UTC
view on stackexchange narkive permalink

Zgodnie z to, każda aplikacja w systemie Android działa jako oddzielny użytkownik na poziomie jądra z unikalnym identyfikatorem użytkownika i identyfikatorem grupy.

A więc co się dzieje pod maską kiedy dodajesz nowego użytkownika (np. do udostępnionego tabletu)?

Jeśli sobie przypominam, każde zadanie to aplikacja uruchamiana jako oddzielny „użytkownik” w jądrze, pod ogólnym zalogowanym użytkownikiem. Oznacza to, że jest wielu „UŻYTKOWNIKÓW”, jak w przypadku prawdziwych osób z kontami, ale poziom jądra rzeczy to wirtualny użytkownik, a nie rzeczywista osoba lub użytkownik tabletu / urządzenia, ale abstrakcyjny izolowany proces. Jest to kwestia bezpieczeństwa / prywatności. Dodanie kolejnego ludzkiego profilu użytkownika po prostu dodaje kolejną warstwę. Będziesz użytkownikiem 1 z wieloma aplikacjami działającymi pod wirtualnymi „użytkownikami”, a użytkownik 2 będzie miał swoje aplikacje działające pod wirtualnymi użytkownikami. Słowo „użytkownik” jest mylące.
Nie myl „użytkowników systemu operacyjnego” z * profilami / kontami użytkowników *. Funkcja „Wielu użytkowników” dodana z JellyBean wykorzystuje * Profile * dla różnych kont, a nie użytkowników systemu operacyjnego. Dwie zupełnie różne pary butów.
Dwa odpowiedzi:
Dan Hulme
2014-01-27 19:12:09 UTC
view on stackexchange narkive permalink

Identyfikatory użytkowników Linuksa , których używa Android do izolowania aplikacji od siebie, nie są całkowicie powiązane z profilami użytkowników na tabletach z Androidem 4.2.

W Androidzie , każda aplikacja otrzymuje własny katalog do zapisywania danych. System identyfikatorów użytkowników Linuksa służy do upewnienia się, że aplikacje nie mogą odczytywać danych innych osób. Ale wszystkie te katalogi danych znajdują się w jednym katalogu w systemie plików, / data / user / 0 . Powiedzmy, że pierwszy użytkownik nazywa się Abulurd i instaluje aplikację Showr. Może mieć identyfikator użytkownika 1004 i katalog /data/user/0/com.shadowburst.showr.

Załóżmy teraz, że tworzysz nowy profil użytkownika dla Beatrice . Otrzymuje nowy katalog / data / user / 1 , który zaczyna się pusty. Kiedy loguje się na urządzeniu i instaluje Showr, nie pobiera aplikacji ponownie (ponieważ instalator aplikacji na Androida wie, że plik APK jest już na urządzeniu), ale tworzy nowy identyfikator użytkownika 1007 (na przykład), i nowy katalog /data/user/1/com.shadowburst.showr.

Android używa uprawnień systemu plików Linuksa i różnych identyfikatorów użytkowników Linuksa, nie tylko po to, aby upewnić się, że Abulurd's Showr nie może odczytać danych z innych aplikacji Abulurd, ale także tego, że Abulurd's Showr nie może odczytać danych Beatrice's Showr. Dwie instancje Showr działają w różnych procesach, z różnymi identyfikatorami użytkowników.

Jeśli znasz terminologię Linuksa, tworzenie nowego profilu użytkownika jest podobne do używania chroot na urządzenie, aby uzyskać izolowaną część systemu plików do uruchamiania aplikacji.

To, co opisałem, to zwykły proces, ale tak jak aplikacje mogą być pisane w celu współdzielenia katalogu danych z innymi aplikacjami przez tego samego programistę (podpisane tym samym kluczem), Android daje aplikacjom możliwość powiedzenia, że ​​współpracują wielu użytkowników. W ten sposób aplikacja może być napisana tak, aby miała jeden proces dla wszystkich profili użytkowników, aby umożliwić im udostępnianie danych lub wykonywanie specjalnych funkcji. Na przykład ekran blokady musi działać w ten sposób, ponieważ wszystkie profile użytkowników współdzielą jedną aplikację blokady ekranu, która musi czytać ustawienia ekranu blokady wszystkich użytkowników.

Paralelny post :) Mówiąc prościej, czy profile można porównać do uruchamiania różnych maszyn wirtualnych na tym samym hoście, używając pewnego rodzaju „współdzielonej pamięci”?
Nie. Maszyna wirtualna miałaby własne jądro.
Jeśli więc osoba instaluje aplikację i jest ona przypisana do identyfikatora użytkownika np. app_143, a później tworzy inny _ profil użytkownika_ i ponownie uruchamia aplikację z tym _ profilem użytkownika_ aktywnym w pewnym momencie, inny identyfikator użytkownika, np. można utworzyć app_265 dla tej samej aplikacji?
@galegosimpatico Tak, to jest dokładnie to. Nie zapominaj, że aplikacja musi zostać zainstalowana dla nowego profilu użytkownika, zanim będzie można ją uruchomić.
Dzięki. Mówisz, że nie pobiera aplikacji dwukrotnie, ponieważ instalator wie, że plik APK jest już na urządzeniu. Cóż, nie pobiera go, ale czy ponownie instaluje aplikację (na żądanie innego profilu)? Czy nie można udostępniać niektórych plików binarnych wszystkim użytkownikom? (do ponownych instalacji naprawdę ciężkich lub dużych aplikacji)
@Reflection Tak, instaluje aplikację w nowym profilu użytkownika. Nie oznacza to, że kopiuje plik APK, po prostu tworzy nowe identyfikatory użytkowników i nowy katalog danych (a menedżer pakietów umieszcza notatkę w danych użytkownika, aby powiedzieć, że aplikacja jest zainstalowana dla tego użytkownika). Nawet jeśli aplikacja jest duża, zajmuje tylko trochę więcej miejsca, chyba że aplikacja pobierze duży plik do swojego prywatnego katalogu danych po pierwszym uruchomieniu.
Więc w którym katalogu znajdują się rzeczywiste „pliki wykonywalne” aplikacji? Który użytkownik na poziomie jądra jest właścicielem tych plików? Kto ma dostęp oraz uprawnienia do odczytu i zapisu do tych plików?
Plik APK * jest * rzeczywistym plikiem wykonywalnym. Istnieje kilka katalogów, w których mogą znajdować się pliki APK. Są one własnością użytkownika systemu i są czytelne dla wszystkich. Jeśli jest coś konkretnego, co chcesz wiedzieć o systemie, zadaj nowe pytanie.
Izzy
2014-01-27 19:12:29 UTC
view on stackexchange narkive permalink

Po dodaniu nowego konta użytkownika jest tworzone nowe konto (lub „Profil użytkownika”). Nie ma to nic wspólnego z zarządzaniem użytkownikami / grupami na poziomie systemu operacyjnego. Zauważysz, że większość poradników (np. to w HowToGeek) mówi o kontach , ponieważ termin „użytkownik” byłby raczej mylący.

Nie jestem programistą Androida, więc nie mogę podać głębszego wyjaśnienia technicznego. Ale o ile wiem, funkcja dla wielu użytkowników jest realizowana w górnej części rdzenia Linuksa (tj. W Javie / Dalvik). EDYTUJ: Dan opublikował swoją odpowiedź w tym samym czasie co ja, więc zajrzyj tam, aby zapoznać się z podstawami technicznymi :)



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...