
Hallo allerseits! Wir haben uns die Zeit genommen, eine Reihe von Artikeln ĂŒber das interne Android-GerĂ€t fortzusetzen. In diesem Artikel werde ich ĂŒber den Android-Startvorgang, ĂŒber den Inhalt des Dateisystems, ĂŒber die Speicherung von Benutzer- und Anwendungsdaten, ĂŒber den Root-Zugriff, ĂŒber die PortabilitĂ€t von Android-Builds und ĂŒber das Fragmentierungsproblem sprechen.
Serienartikel:
Pakete
Wie ich bereits sagte, basiert die Android-Architektur auf Anwendungen. Es sind Anwendungen, die in vielen Teilen des Systems eine SchlĂŒsselrolle im GerĂ€t spielen. FĂŒr das harmonische Zusammenspiel von Anwendungen werden die AktivitĂ€ts- und Absichtsmodelle erstellt, und das Android-Sicherheitsmodell basiert auf der Isolierung von Anwendungen. Wenn der AktivitĂ€tsmanager die Interaktion von Anwendungskomponenten koordiniert, ist der Paketmanager fĂŒr die Installation, Aktualisierung und Verwaltung der Anwendungsrechte verantwortlich (Paketmanager - Sie können ihn mit dem Befehl pm
in der Shell aufrufen).
Wie der Name schon sagt, werden Anwendungen auf dieser Ebene hĂ€ufig als Pakete bezeichnet . Pakete werden im APK- Format (Android-Paket) verteilt - spezielle Zip-Archive. Jedes Paket hat einen Namen (auch als Anwendungs-ID bezeichnet ), der diese Anwendung eindeutig identifiziert (jedoch nicht ihre spezifische Version - im Gegenteil, die Namen verschiedener Versionen des Pakets mĂŒssen ĂŒbereinstimmen, andernfalls werden sie als separate Pakete betrachtet). Paketnamen werden normalerweise in Notation des umgekehrten DNS-Namens geschrieben. Beispielsweise verwendet die YouTube-Anwendung den Paketnamen com.google.android.youtube
. Oft stimmt der Paketname mit dem in seinem Java-Code verwendeten Namespace ĂŒberein, Android benötigt ihn jedoch nicht (auĂerdem enthalten die APK-Dateien der Anwendung normalerweise Bibliotheken von Drittanbietern, deren Namespace natĂŒrlich ĂŒberhaupt nichts mit den Paketnamen zu tun hat. wer benutzt sie).
Jede APK wĂ€hrend der Montage muss vom Entwickler mit einer digitalen Signatur signiert werden. Android prĂŒft bei der Installation der Anwendung, ob diese Signatur vorhanden ist, und vergleicht beim Aktualisieren einer bereits installierten Anwendung zusĂ€tzlich die öffentlichen SchlĂŒssel, mit denen die alte und die neue Version signiert sind. Sie mĂŒssen ĂŒbereinstimmen, wodurch sichergestellt wird, dass die neue Version vom selben Entwickler wie die alte erstellt wurde. (Wenn diese PrĂŒfung nicht verfĂŒgbar wĂ€re, könnte der Angreifer ein Paket mit demselben Namen wie die vorhandene Anwendung erstellen, den Benutzer davon ĂŒberzeugen, es durch âAktualisierenâ der Anwendung zu installieren, und Zugriff auf die Daten dieser Anwendung erhalten.)
Das Update des Pakets selbst ist die Installation der neuen Version anstelle der alten unter Beibehaltung der vom Benutzer erhaltenen Daten und Berechtigungen. Sie können Anwendungen auch auf Ă€ltere Versionen herunterstufen. Gleichzeitig löscht Android jedoch standardmĂ€Ăig die von der neuen Version gespeicherten Daten, da die alte Version möglicherweise nicht mit den von der neuen Version verwendeten Datenformaten arbeiten kann.
Wie bereits erwĂ€hnt, wird der Code jeder Anwendung normalerweise unter einem eigenen Unix-Benutzer (UID) ausgefĂŒhrt, wodurch deren gegenseitige Isolation sichergestellt wird. Einige Anwendungen fordern Android möglicherweise ausdrĂŒcklich auf, eine gemeinsame UID fĂŒr sie zu verwenden, mit der sie direkt auf die Dateien des jeweils anderen zugreifen und auf Wunsch sogar im selben Prozess ausgefĂŒhrt werden können.
Obwohl normalerweise ein Paket einer APK-Datei entspricht, unterstĂŒtzt Android Pakete, die aus mehreren APKs bestehen (dies wird als geteilte APKs oder geteilte APKs bezeichnet ). Dies ist die Grundlage fĂŒr solche "magischen" Funktionen von Android, wie das dynamische Laden zusĂ€tzlicher Anwendungsmodule ( dynamische Funktionsmodule ) und die sofortige AusfĂŒhrung in Android Studio (automatische Aktualisierung des laufenden Anwendungscodes ohne dessen vollstĂ€ndige Neuinstallation und in vielen FĂ€llen sogar ohne Neustart).

Dateisystem
Das DateisystemgerÀt ist eines der wichtigsten und interessantesten Probleme in der Architektur des Betriebssystems, und das DateisystemgerÀt in Android ist keine Ausnahme.
Interessant ist zum einen, welche Dateisysteme verwendet werden, dh in welchem ââFormat der Inhalt der Dateien auf einer bedingten Festplatte gespeichert wird (bei Android sind dies normalerweise Flash-Speicher und SD-Karten) und wie der Kernel des Systems dieses Format unterstĂŒtzt . Der in Android verwendete Linux-Kernel unterstĂŒtzt bis zu dem einen oder anderen Grad eine groĂe Anzahl verschiedener Dateisysteme - von denen, die in Windows FAT und NTFS verwendet werden, und denen, die in Darwin vom berĂŒchtigten HFS + und modernen APFS verwendet werden - bis zu den 9pfs des Netzwerks aus Plan 9. Es gibt viele "native" »FĂŒr Linux-Dateisysteme - zum Beispiel Btrfs und die ext-Familie.
Der De-facto-Standard fĂŒr Linux ist seit langem ext4 und wird standardmĂ€Ăig von den meisten gĂ€ngigen Linux-Distributionen verwendet. Daher ist die Tatsache, dass es in Android verwendet wird, nicht unerwartet. Einige Assemblys (und einige Enthusiasten) verwenden auch F2FS (Flash-Friendly File System), das speziell fĂŒr Flash-Speicher optimiert wurde (mit seinen Vorteilen ist jedoch nicht alles so klar ).
Zweitens ist das sogenannte Dateisystem-Layout von Interesse - der Speicherort von System- und Benutzerordnern und -dateien im Dateisystem. Das Dateisystem-Layout unter ânormalem Linuxâ verdient eine detailliertere Beschreibung (die beispielsweise unter diesem Link zu finden ist ). Ich werde hier nur einige der wichtigsten Verzeichnisse erwĂ€hnen:
/home
speichert Benutzer-Home-Ordner; Hier speichern Programme in verschiedenen versteckten Ordnern ( .cache
, .cache
, .config
und andere) ihre Einstellungen, Daten und den Cache, die fĂŒr den Benutzer spezifisch sind./boot
speichert den Linux-Kernel und das initramfs-Image (spezielles Boot-Dateisystem)./usr
(es wÀre logischer, /system
aufzurufen) speichert den Hauptteil des Systems selbst, einschlieĂlich Bibliotheken, ausfĂŒhrbarer Dateien, Konfigurationsdateien sowie Ressourcen - Themen fĂŒr die BenutzeroberflĂ€che, Symbole, Inhalte des Systemhandbuchs usw./etc
(es wÀre logischer, /config
aufzurufen) speichert systemweite Einstellungen,/dev
speichert GerÀtedateien und andere spezielle Dateien (z. B. den Socket /dev/log
)./var
speichert verÀnderbare Daten - Protokolle, Systemcache, Datenbankinhalte usw.
Android verwendet ein Àhnliches, aber deutlich unterschiedliches Dateisystemlayout. Hier sind einige der wichtigsten Teile davon:
/data
speichert verÀnderbare Daten,- Der Kernel und das initramfs-Image werden auf einer separaten Flash-Partition gespeichert, die nicht im Hauptdateisystem bereitgestellt werden kann.
/system
entspricht /usr
und speichert das System,/vendor
- ein Analogon von /system
das fĂŒr Dateien /system
die fĂŒr diese Android-Assembly spezifisch sind und nicht im "Standard" Android enthalten sind./dev
speichert wie unter "normalem Linux" GerÀtedateien und andere spezielle Dateien.
Die interessantesten dieser Verzeichnisse sind /data
und /system
. Der Inhalt von /system
beschreibt das System und enthÀlt die meisten seiner Bestandteile. /system
befindet sich in einem separaten Bereich des Flash-Speichers, der standardmĂ€Ăig im schreibgeschĂŒtzten Modus bereitgestellt wird. Normalerweise Ă€ndern sich die Daten nur, wenn das System aktualisiert wird. /data
ebenfalls in einem separaten Abschnitt und beschreibt den verĂ€nderbaren Status eines bestimmten GerĂ€ts, einschlieĂlich Benutzereinstellungen, installierter Anwendungen und deren Daten, Caches usw. Das Löschen aller Benutzerdaten, das sogenannte ZurĂŒcksetzen auf die Werkseinstellungen, mit diesem Schema dient lediglich zum Löschen des Inhalts des Datenabschnitts. Ein unberĂŒhrtes System bleibt im Systemabschnitt installiert.
# mount | grep /system /dev/block/mmcblk0p14 on /system type ext4 (ro,seclabel,relatime,data=ordered) # mount | grep /data /dev/block/mmcblk0p24 on /data type ext4 (rw,seclabel,nosuid,nodev,noatime,noauto_da_alloc,data=writeback)
Anwendungen - nÀmlich APK, Odex-Dateien (vorab kompilierter Java-Code) und ELF-Bibliotheken - werden in /system/app
(fĂŒr mit dem System gelieferte Anwendungen) oder in /data/app
(fĂŒr vom Benutzer installierte Anwendungen) installiert Anwendungen). Beim Erstellen einer Android-Assembly wird jeder vorinstallierten Anwendung ein Ordner mit dem Namen des Formulars /system/app/Terminal
zugewiesen. FĂŒr vom Benutzer installierte Anwendungen werden wĂ€hrend der Installation Ordner erstellt, deren Namen mit ihrem Paketnamen beginnen. Beispielsweise wird eine YouTube-Anwendung in einem Ordner mit einem Namen wie /data/app/com.google.android.youtube-bkJAtUtbTuzvAioW-LEStg==/
.
Ăber dieses SuffixDas Suffix im Namen der Anwendungsordner besteht aus 16 zufĂ€lligen Bytes, die in Base64 codiert sind. Die Verwendung dieses Suffix verhindert, dass andere Anwendungen den Pfad zu einer Anwendung âerratenâ, den sie nicht kennen sollten. GrundsĂ€tzlich ist die Liste der auf dem GerĂ€t installierten Anwendungen und die Pfade zu ihnen kein Geheimnis - sie kann ĂŒber Standard-APIs abgerufen werden -, aber in einigen FĂ€llen (insbesondere fĂŒr Sofortanwendungen) ist der Zugriff auf diese Daten eingeschrĂ€nkt.
Dieses Suffix dient einem anderen Zweck. Jedes Mal, wenn die Anwendung aktualisiert wird, wird das neue APK in dem Ordner mit einem neuen Suffix installiert, wonach der alte Ordner gelöscht wird. Vor Version 8.0 Oreo war dies der Zweck von Suffixen, und anstelle von zufÀlligen Bytes -2
abwechselnd -1
und -2
verwendet (z. B. /data/app/com.google.android.youtube-2
fĂŒr YouTube).
Der vollstÀndige Pfad zum Anwendungsordner in /system/app
oder /data/app
kann mit der Standard-API oder dem pm path org.example.packagename
abgerufen werden, der die Pfade aller APK-Dateien der Anwendung anzeigt.
# pm path com.android.egg package:/system/app/EasterEgg/EasterEgg.apk
Da vorinstallierte Anwendungen im Systemabschnitt gespeichert sind (deren Inhalt sich, wie ich Sie erinnere, nur Ă€ndert, wenn das System aktualisiert wird), können sie nicht gelöscht werden (stattdessen bietet Android die Möglichkeit, sie zu "deaktivieren"). Das Aktualisieren vorinstallierter Anwendungen wird jedoch unterstĂŒtzt. In diesem Fall wird ein Ordner in /data/app
fĂŒr die neue Version erstellt, und die mit dem System gelieferte Version verbleibt in /system/app
. In diesem Fall hat der Benutzer die Möglichkeit, Aktualisierungen einer solchen Anwendung zu "entfernen" und von /system/app
zur Version zurĂŒckzukehren.
Ein weiteres Merkmal vorinstallierter Anwendungen besteht darin, dass sie spezielle Systemberechtigungen erhalten können. Beispielsweise erhalten Anwendungen von Drittanbietern nicht die DELETE_PACKAGES
, mit der Sie andere Anwendungen entfernen können, REBOOT
, mit der Sie das System neu starten können, und READ_FRAME_BUFFER
, mit der Sie direkt auf den Inhalt des Bildschirms zugreifen können. Diese Berechtigungen haben eine Signaturschutzstufe, dh die Anwendung, die versucht, auf sie zuzugreifen, muss mit demselben SchlĂŒssel signiert sein wie die Anwendung oder der Dienst, in dem sie implementiert sind. In diesem Fall, da diese Berechtigungen vom System implementiert werden, der SchlĂŒssel, mit dem sie signiert sind Android Build
Um verÀnderbare Daten zu speichern, wird jeder Anwendung ein Ordner in /data/data
zugewiesen (z. B. /data/data/com.google.android.youtube
fĂŒr YouTube). Nur die Anwendung selbst hat Zugriff auf diesen Ordner, dh nur die UID, unter der diese Anwendung gestartet wird (wenn die Anwendung mehrere UIDs verwendet oder wenn mehrere Anwendungen eine gemeinsame UID verwenden, kann alles komplizierter sein). In diesem Ordner speichern Anwendungen Einstellungen, Cache (in den Unterordnern shared_prefs
bzw. cache
) und alle anderen benötigten Daten:
# ls /data/data/com.google.android.youtube/ cache code_cache databases files lib no_backup shared_prefs # cat /data/data/com.google.android.youtube/shared_prefs/youtube.xml <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <string name="user_account">username@gmail.com</string> <boolean name="h264_main_profile_supported7.1.2" value="true" /> <int name="last_manual_video_quality_selection_max" value="-2" /> <...> </map>
Das System kennt die Existenz des cache
Ordners und kann ihn selbst bereinigen, wenn nicht genĂŒgend Speicherplatz vorhanden ist. Wenn Sie die Anwendung deinstallieren, wird der gesamte Ordner dieser Anwendung vollstĂ€ndig gelöscht und die Anwendung hinterlĂ€sst keine Spuren. Alternativ können beide Benutzer in den Einstellungen explizit Folgendes tun:

Dieser jeder Anwendung zugewiesene Datenspeicher wird als interner Speicher bezeichnet.
DarĂŒber hinaus verfĂŒgt Android ĂŒber eine andere Art von Speicher - den sogenannten externen Speicher (externer Speicher - dieser Name spiegelt die ursprĂŒngliche Idee wider, dass sich der externe Speicher auf einer externen SD-Karte befinden sollte, die in das Telefon eingelegt ist). TatsĂ€chlich spielt der externe Speicher die Rolle des Basisordners des Benutzers. Dort befinden sich Ordner wie Dokumente, Download, Musik und Bilder. Der externe Speicher, den Dateimanager als Standardordner öffnen, ermöglicht dem Computer den Zugriff auf den Inhalt des externen Speichers, wenn eine Verbindung besteht per Kabel.
# ls /sdcard Alarms Download Podcasts Android Movies Ringtones Books Music Subtitles DCIM Notifications bluetooth Documents Pictures
Im Gegensatz zum internen Speicher, der in Ordner einzelner Anwendungen unterteilt ist, ist der externe Speicher eine âgemeinsame Zoneâ: Jede Anwendung, die vom Benutzer die entsprechende Berechtigung erhalten hat, hat vollen Zugriff darauf. Wie bereits in einem frĂŒheren Artikel erwĂ€hnt, sollten Anwendungen wie der Dateimanager diese Berechtigung anfordern. FĂŒr die meisten anderen Anwendungen ist es besser, die Absicht mit der Aktion ACTION_GET_CONTENT
, damit der Benutzer die gewĂŒnschte Datei im Systemdateimanager auswĂ€hlen kann.
Viele Anwendungen bevorzugen es, einige ihrer internen Dateien, die groĂ sind (z. B. einen Cache mit heruntergeladenen Bildern und Audiodateien), in einem externen Speicher zu speichern. Zu diesem Android/data/com.google.android.youtube
weist Android Anwendungen in externen Speicherordnern Namen der Form Android/data/com.google.android.youtube
. Die Anwendung selbst benötigt keine Berechtigung, um auf den gesamten externen Speicher zuzugreifen, um auf diesen Ordner zuzugreifen (da ihre UID als EigentĂŒmer dieses Ordners festgelegt ist). Jede andere Anwendung mit dieser Berechtigung kann jedoch auf diesen Ordner zugreifen. Es lohnt sich also, sie zu verwenden Nur zum Speichern öffentlicher und unkritischer Daten. Wenn Sie die Anwendung deinstallieren, löscht das System seinen speziellen Ordner im externen Speicher. Dateien, die von Anwendungen in einem externen Speicher auĂerhalb ihres speziellen Ordners erstellt wurden, gehören jedoch dem Benutzer und bleiben nach dem Entfernen der Anwendung, die sie erstellt hat, an Ort und Stelle.
Wie oben erwĂ€hnt, wurde zunĂ€chst angenommen, dass sich der externe Speicher tatsĂ€chlich auf einer externen SD-Karte befindet, da zu diesem Zeitpunkt das Volumen der SD-Karten erheblich gröĂer war als der in die Telefone integrierte Speicher (in HTC Dream waren es nur 256 Megabyte, davon Dem Datenabschnitt wurden ca. 90 Megabyte zugewiesen. Seitdem haben sich viele Bedingungen geĂ€ndert; Moderne Telefone verfĂŒgen hĂ€ufig nicht ĂŒber einen SD-Kartensteckplatz, aber nach mobilen Standards ist eine groĂe Menge an internem Speicher installiert (in Samsung Galaxy Note 9 können es beispielsweise bis zu 512 Gigabyte sein ).
Daher befinden sich in modernen Android-GerÀten fast immer sowohl interner als auch externer Speicher im internen Speicher. Der reale Pfad, auf dem sich der externe Speicher im Dateisystem befindet, hat die Form /data/media/0
(fĂŒr jeden GerĂ€tebenutzer wird ein separater externer Speicher erstellt , und die Nummer im Pfad entspricht der Benutzernummer). Aus KompatibilitĂ€tsgrĂŒnden kann auf den externen Speicher auch ĂŒber die /sdcard
, /mnt/sdcard
, /storage/self/primary
, /storage/emulated/0
, mehrere Pfade, die mit /mnt/runtime/
, und einige andere Pfade zugegriffen werden.
Andererseits haben viele GerĂ€te noch einen SD-Kartensteckplatz. Die in das Android-GerĂ€t eingelegte SD-Karte kann als normales externes Laufwerk verwendet werden (ohne sie in einen internen oder externen Speicher des Systems umzuwandeln) - speichern Sie Dateien darauf, öffnen Sie die darauf gespeicherten Dateien, ĂŒbertragen Sie damit Dateien auf andere GerĂ€te usw. DarĂŒber hinaus können Sie mit Android eine SD-Karte "ausleihen" und internen und externen Speicher darauf ablegen (dies wird als ausgeliehener Speicher bezeichnet - angenommener Speicher ). Gleichzeitig formatiert das System die SD-Karte neu und verschlĂŒsselt ihren Inhalt. Die darauf gespeicherten Daten können nicht gelesen werden, indem sie an ein anderes GerĂ€t angeschlossen werden.

Weitere Informationen hierzu finden Sie beispielsweise in diesem Beitrag und in der offiziellen Dokumentation fĂŒr Anwendungsentwickler und Entwickler von Android-Assemblys .
Laden
Der traditionelle Ansatz zur Sicherheit von Computersystemen beschrĂ€nkt sich auf den Schutz des Systems vor Softwareangriffen. Es wird angenommen, dass ein Angreifer, der physischen Zugriff auf einen Computer hat, bereits verloren ist : Er kann vollen Zugriff auf alle darauf gespeicherten Daten erhalten. Dazu reicht es ihm beispielsweise aus, auf diesem Computer ein beliebiges von ihm gesteuertes Betriebssystem auszufĂŒhren, um die durch das "Haupt" -Rechtssystem auferlegten EinschrĂ€nkungen zu umgehen oder die Datenplatte direkt mit einem anderen GerĂ€t zu verbinden. Falls gewĂŒnscht, kann ein Angreifer den Computer betriebsbereit lassen, aber das darauf installierte System patchen, beliebige HintertĂŒren, Keylogger usw. installieren.
Es ist der Schutz vor Softwareangriffen, der sich auf das Modell der EinschrĂ€nkung von Benutzerrechten unter Unix (und die darauf basierende App-Sandbox-Technologie in Android) konzentriert. Die Unix-EinschrĂ€nkung an sich schĂŒtzt das System nicht vor einem Benutzer, der den Weg zum Serverraum gefunden und physischen Zugriff auf den Computer erhalten hat. Und wenn seriöse Mehrbenutzerserver vor unbefugtem physischen Zugriff auf PCs - und insbesondere auf mobile GerĂ€te - geschĂŒtzt werden können und sollten, ist dieser Ansatz einfach nicht anwendbar.
Es gibt zwei Möglichkeiten, um die Situation durch Schutz vor einem Angreifer zu verbessern, der physischen Zugriff auf das GerÀt erhalten hat:
- Erstens ist es möglich, auf einer Festplatte gespeicherte Daten zu verschlĂŒsseln , wodurch verhindert wird , dass ein Angreifer Zugriff auf die Daten selbst erhĂ€lt, selbst wenn er Zugriff auf den Inhalt der Festplatte hat.
- Zweitens ist es möglich, die FĂ€higkeit zum Laden beliebiger Betriebssysteme auf das GerĂ€t irgendwie einzuschrĂ€nken und einen Angreifer zu zwingen, Authentifizierungs- und Autorisierungsverfahren im installierten System durchzufĂŒhren.
Mit diesen beiden Schutzbereichen ist das sichere Startmodell in Android verbunden.
Verifizierter Start
Der Android-Startvorgang ist so konzipiert, dass Angreifer einerseits kein beliebiges Betriebssystem auf das GerÀt herunterladen können, andererseits Benutzer benutzerdefinierte Android-Assemblys (und andere Systeme) installieren können.
Erstens erlauben Android-GerĂ€te im Gegensatz zu âDesktopâ -Computern normalerweise nicht, dass ein Benutzer (oder ein Angreifer) von einem externen Medium startet. Stattdessen wird der auf dem GerĂ€t installierte Bootloader (Bootloader) sofort gestartet. Bootloader ist ein relativ einfaches Programm, dessen Aufgaben (beim Laden im normalen Modus) Folgendes umfassen:
- Initialisierung und Konfiguration der vertrauenswĂŒrdigen AusfĂŒhrungsumgebung (z. B. ARM TrustZone),
- Suchen von Partitionen des internen Speichers, in denen Linux-Kernel-Images und initramfs gespeichert sind,
- (integrity) â â ,
- initramfs .
Flashing, unlocking, fastboot recovery
, bootloader .
-, (Android) , recovery . recovery, Android- , , Android recovery .
«» bootloader', â ( flashing ) . bootloader , fastboot mode ( bootloader mode), bootloader' fastboot ( fastboot
Android SDK ).
bootloader' . , Samsung, bootloader'a (Loke) (Odin). Odin Samsung ( Odin), Heimdall .
bootloader' ( ), recovery Android, , :
$ fastboot flash recovery recovery.img $ fastboot flash boot boot.img $ fastboot flash system system.img
; : , , bootloader' Android, , , , .
, bootloader' (unlocking the bootloader, OEM unlock) â bootloader' recovery, ( ). Android, LineageOS ( CyanogenMod ), Paranoid Android , AOKP , OmniROM .
bootloader' - , ( data ) . , , (, Google ), â , .

recovery bootloader , .
bootloader' :

recovery, «» (flashaholics) â TWRP (Team Win Recovery Project). - «», zip-, :

Android ( file-based encryption ). ext4 , Linux ( fscrypt ), .
, data , , (credential encrypted storage). , , . , , .

credential encrypted storage Android device encrypted storage â , ( Trusted Execution Environment). , , , . , Direct Boot : ; ( ) device encrypted storage, , . , Direct Boot , , - .
Root
root- â « root» (UID 0, ). , root â Unix-, â â , .
, Android , root- . , « », Android « », root- «», :
- â , APK ,
- : -, email-, , , , , , ( activity intent', ),
- (icon packs),
- , ,
- ( Android-) ,
- , Android, .

, , , root- . root- ( ), Android root . , , Unix-; shell, adb shell
, Unix- shell .
, , root :
- -, root- Android â Android Studio QEMU, .

- -, root- Android ( pre-rooted ROMs).
- -, bootloader' root- Android , ,
su
, bootloader. - , -, , , root-, ( root- ). , 2016 , root- Dirty Cow .
? , root- . , root-, , , . â , . , , system ( ).
, root- â , .
root-
With great power comes great responsibility.
, . , root- .
, , . , root- , , , root- . root, , , , â , , , ..
, Unix, Android , â . root- , , . , root- Android, .
, , root- , . , , , , , . , â , Google Pay ( Android Pay) â root- , .

, - Pokémon GO root- , , .
Google Play root-
Google Google Play Store Google Play Services , root- , Android , , , , . Play Store â ( , ) Android, . ( â , Amazon Android Fire OS â Echo, Fire TV, Fire Phone, Kindle Fire Tablet â Google). root- Android-.
, Google , root-, Google Play ( Open GApps ); Google , .
Device manufacturers work with Google to certify that Android devices with Google apps installed are secure and will run apps correctly. To be certified, a device must pass Android compatibility tests. If you are unable to add a Google Account on your Android device, your Android device software might not have passed Android compatibility tests, or the device manufacturer has not submitted the results to Google to seek approval. As a result, your device is uncertified. This means that your device might not be secure.
If you are a User wanting to use custom ROMs on your device, please register your device by submitting your Google Services Framework Android ID below.
root
«» Linux, Unix-, root- ( sudo
su
) ( , Unix- root, ) (, ). , root-.
su
Android Open Source Project , Unix- shell ( root), root-. su
, , , .
, su
. su
, root-. , SuperSU ; Magisk .

Magisk
Magisk â , , /system
, system ( systemless-ly ), «» Linux . Magisk Hide â root-, root- Magisk â - Google Pay, root- . Magisk Hide root-, SafetyNet Google.
, , Google Pay root- â root- . , root-, - Google Pay. , .
Magisk systemless- «» Magisk Modules , Magisk. , , root- Xposed ViPER , .
SoC,
, «», , â , â (, Wi-Fi ).
, Android- (system on a chip, SoC). â , , -, , LTE-, Bluetooth- Wi-Fi- .. â . , , , , , .
, , . , «», , , , . , , -, , , , .
â Android â SoC . , , â LTE- â . , ; , , .
SoC (, Qualcomm) Android- (, Sony LG), Android, Android Open Source Project. , Android, , , .
Android Android-. , Android. Android , , . .
, : Android â , . Android, .
, , , Android. .
-, . , . , , , , .
-, Android â developer experience (DX, user experience/UX). , Android, API â Android Framework, OpenGL/Vulkan â . , , , Android â , , .

Don't Stop Thinking About Tomorrow
Android- . , Google Nexus Pixel , Android. Android , , , .
, , Android, SoC. Android «» (, , Android-x86 RemixOS ). Android ChromeOS, Chromebook' Android- Linux- -. â Android â Anbox , Android- «» Linux-. (, Android- x86-, , Java, .)

, Android â , Android .
â Android. , , . , , Android .
. 2017 Google Project Treble â , ( HAL, hardware abstraction layer) ( , ) . Treble , , , â â .
Treble . Treble (Sony, Nokia, OnePlus, Oppo, Xiaomi, Essential Vivo â Google) - Android Pie. Treble Essential Android Pie Essential Phone Android Pie. Android â - â , Treble, , SoC.
Treble . Java «write once, run everywhere» â Android- . Treble â , Android SoC. , , Treble. , Android- .
userspace Android: init, Zygote, Binder, props.