
Bonjour à tous! Nous avons pris le temps de poursuivre une série d'articles sur l'appareil interne Android. Dans cet article, je parlerai du processus de démarrage Android, du contenu du systÚme de fichiers, de la façon dont les données des utilisateurs et des applications sont stockées, de l'accÚs root, de la portabilité des versions d'Android et du problÚme de fragmentation.
Articles de série:
Forfaits
Comme je l'ai déjà dit, l'architecture Android est construite autour d'applications. Ce sont les applications qui jouent un rÎle clé dans le périphérique de nombreuses parties du systÚme, c'est pour l'interaction harmonieuse des applications que les modÚles d'activité et d'intention sont construits, et le modÚle de sécurité Android est basé sur l'isolement des applications. Et si le gestionnaire d'activité est engagé dans l'orchestration de l'interaction des composants d'application, le gestionnaire de packages est responsable de l'installation, de la mise à jour et de la gestion des droits des applications (gestionnaire de packages - vous pouvez l'appeler dans le shell avec la commande pm
).
Comme son nom l'indique «gestionnaire de packages», à ce niveau, les applications sont souvent appelées packages . Les packages sont distribués au format APK (package Android) - archives zip spéciales. Chaque package a un nom (également appelé ID d'application ) qui identifie de maniÚre unique cette application (mais pas sa version spécifique - au contraire, les noms des différentes versions du package doivent correspondre, sinon ils seront considérés comme des packages distincts). Les noms de package sont généralement écrits en notation du nom DNS inverse - par exemple, l'application YouTube utilise le nom de package com.google.android.youtube
. Souvent, le nom du package correspond à l'espace de noms utilisé dans son code Java, mais Android ne l'exige pas (en outre, les fichiers APK de l'application incluent généralement des bibliothÚques tierces, dont l'espace de noms, bien sûr, n'a rien à voir avec les noms de packages, qui les utilisent).
Chaque APK pendant l'assemblage doit ĂȘtre signĂ© par le dĂ©veloppeur Ă l'aide d'une signature numĂ©rique. Android vĂ©rifie la prĂ©sence de cette signature lors de l'installation de l'application et lors de la mise Ă jour d'une application dĂ©jĂ installĂ©e, il compare en outre les clĂ©s publiques avec lesquelles l'ancienne et la nouvelle version sont signĂ©es; ils doivent correspondre, ce qui garantit que la nouvelle version a Ă©tĂ© créée par le mĂȘme dĂ©veloppeur que l'ancienne. (Si cette vĂ©rification n'Ă©tait pas disponible, l'attaquant pourrait crĂ©er un package du mĂȘme nom que l'application existante, convaincre l'utilisateur de l'installer en «mettant Ă jour» l'application, et accĂ©der aux donnĂ©es de cette application.)
La mise Ă jour du package lui-mĂȘme est l'installation de sa nouvelle version au lieu de l'ancienne avec la prĂ©servation des donnĂ©es et autorisations reçues de l'utilisateur. Vous pouvez Ă©galement «rĂ©trograder» les applications vers des versions plus anciennes, mais en mĂȘme temps, par dĂ©faut, Android efface les donnĂ©es enregistrĂ©es par la nouvelle version, car l'ancienne version peut ne pas fonctionner avec les formats de donnĂ©es utilisĂ©s par la nouvelle version.
Comme je l'ai dĂ©jĂ dit, le code de chaque application est gĂ©nĂ©ralement exĂ©cutĂ© sous son propre utilisateur Unix (UID), ce qui garantit leur isolation mutuelle. Plusieurs applications peuvent explicitement demander Ă Android d'utiliser un UID commun pour elles, ce qui leur permettra d'accĂ©der directement aux fichiers des autres et mĂȘme, si vous le souhaitez, de s'exĂ©cuter dans le mĂȘme processus.
Bien que gĂ©nĂ©ralement un package corresponde Ă un fichier APK, Android prend en charge les packages composĂ©s de plusieurs APK (c'est ce qu'on appelle des APK fractionnĂ©s ou des APK fractionnĂ©s ). C'est la base de telles fonctionnalitĂ©s "magiques" d'Android, telles que le chargement dynamique de modules d'application supplĂ©mentaires (modules de fonctionnalitĂ©s dynamiques ) et Instant Run dans Android Studio (mise Ă jour automatique du code d'application en cours d'exĂ©cution sans sa rĂ©installation complĂšte et, dans de nombreux cas, mĂȘme sans redĂ©marrage).

SystĂšme de fichiers
Le périphérique du systÚme de fichiers est l'un des problÚmes les plus importants et les plus intéressants de l'architecture du systÚme d'exploitation, et le périphérique du systÚme de fichiers dans Android ne fait pas exception.
L'intĂ©rĂȘt est, tout d'abord, quels systĂšmes de fichiers sont utilisĂ©s, c'est-Ă -dire dans quel format le contenu des fichiers est enregistrĂ© sur un disque conditionnel (dans le cas d'Android, c'est gĂ©nĂ©ralement une mĂ©moire flash et des cartes SD) et comment le noyau du systĂšme prend en charge ce format . Le noyau Linux utilisĂ© dans Android, Ă un degrĂ© ou un autre, prend en charge un grand nombre de systĂšmes de fichiers diffĂ©rents - de ceux utilisĂ©s dans Windows FAT et NTFS et ceux utilisĂ©s Ă Darwin par le tristement cĂ©lĂšbre HFS + et APFS moderne - au rĂ©seau 9pfs du Plan 9. Il existe de nombreux »Pour les systĂšmes de fichiers Linux - par exemple, Btrfs et la famille ext.
Le standard de facto pour Linux est depuis longtemps ext4 , utilisé par défaut par les distributions Linux les plus populaires. Par conséquent, il n'y a rien d'inattendu dans le fait qu'il soit utilisé dans Android. Certains assemblages (et certains passionnés) utilisent également F2FS (Flash-Friendly File System), optimisé spécifiquement pour la mémoire flash (cependant, avec ses avantages, tout n'est pas si clair ).
DeuxiĂšmement, la disposition dite du systĂšme de fichiers est intĂ©ressante - l'emplacement des dossiers et fichiers systĂšme et utilisateur dans le systĂšme de fichiers. La disposition du systĂšme de fichiers dans «Linux ordinaire» mĂ©rite une description plus dĂ©taillĂ©e (qui peut ĂȘtre trouvĂ©e, par exemple, sur ce lien ); Je ne mentionnerai ici que quelques-uns des rĂ©pertoires les plus importants:
/home
stocke les dossiers personnels des utilisateurs; ici, dans divers dossiers cachés ( .cache
, .cache
, .config
et autres), les programmes stockent leurs paramÚtres, données et cache, spécifiques à l'utilisateur,/boot
stocke le noyau Linux et l'image initramfs (systÚme de fichiers de démarrage spécial),/usr
(il serait plus logique d'appeler /system
) stocke la partie principale du systĂšme lui-mĂȘme, y compris les bibliothĂšques, les fichiers exĂ©cutables, les fichiers de configuration, ainsi que les ressources - thĂšmes pour l'interface, icĂŽnes, contenu du manuel du systĂšme, etc.,/etc
(il serait plus logique d'appeler /config
) stocke les paramÚtres à l'échelle du systÚme,/dev
stocke les fichiers de périphérique et d'autres fichiers spéciaux (par exemple, le socket /dev/log
),/var
stocke des données mutables - journaux, cache systÚme, contenu de base de données, etc.
Android utilise une disposition de systÚme de fichiers similaire mais sensiblement différente. En voici quelques-unes des parties les plus importantes:
/data
stocke des donnĂ©es mutables,- Le noyau et l'image initramfs sont stockĂ©s sur une partition flash distincte, qui ne peut pas ĂȘtre montĂ©e sur le systĂšme de fichiers principal.
/system
correspond Ă /usr
et stocke le systĂšme,/vendor
- un analogue de /system
conçu pour les fichiers spécifiques à cet assemblage Android, et non inclus dans l'Android "standard",/dev
, comme dans "Linux normal", stocke les fichiers de périphériques et autres fichiers spéciaux.
Les plus intéressants de ces répertoires sont /data
et /system
. Le contenu de /system
décrit le systÚme et contient la plupart de ses fichiers constitutifs. /system
est situé sur une section distincte de la mémoire flash, qui est montée par défaut en mode lecture seule; généralement, les données ne changent que lorsque le systÚme est mis à jour. /data
également dans une section distincte et décrit l'état modifiable d'un appareil particulier, y compris les paramÚtres utilisateur, les applications installées et leurs données, les caches, etc. La suppression de toutes les données utilisateur, la soi-disant réinitialisation d'usine, avec ce schéma consiste simplement à supprimer le contenu de la section des données ; un systÚme intact reste installé dans la section systÚme .
# 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)
Les applications - à savoir, leurs APK, fichiers odex (code Java compilé à l'avance) et bibliothÚques ELF - sont installées dans /system/app
(pour les applications /data/app
avec le systĂšme) ou dans /data/app
(pour les installées par l'utilisateur) applications). Lors de la création d'un assembly Android, chaque application préinstallée se voit attribuer un dossier portant le nom du formulaire /system/app/Terminal
, et pour les applications installées par l'utilisateur lors de l'installation, des dossiers sont créés dont les noms commencent par le nom de leur package. Par exemple, une application YouTube est enregistrée dans un dossier avec un nom comme /data/app/com.google.android.youtube-bkJAtUtbTuzvAioW-LEStg==/
.
Ă propos de ce suffixeLe suffixe dans le nom des dossiers d'application est de 16 octets alĂ©atoires encodĂ©s en Base64. L'utilisation de ce suffixe empĂȘche les autres applications de «deviner» le chemin vers une application dont elles ne devraient pas avoir connaissance. En principe, la liste des applications installĂ©es sur l'appareil et les chemins d'accĂšs Ă celles-ci ne sont pas un secret - elles peuvent ĂȘtre obtenues via des API standard - mais dans certains cas (notamment pour les applications instantanĂ©es) l'accĂšs Ă ces donnĂ©es est restreint.
Ce suffixe sert un autre objectif. Chaque fois que l'application est mise à jour, le nouvel APK est installé dans le dossier avec un nouveau suffixe, aprÚs quoi l'ancien dossier est supprimé. Avant la version 8.0 Oreo, c'était le but des suffixes, et au lieu d'octets aléatoires , -1
et -2
utilisés alternativement (par exemple, /data/app/com.google.android.youtube-2
pour YouTube).
Le chemin d'accĂšs complet au dossier d'application dans /system/app
ou /data/app
peut ĂȘtre obtenu Ă l'aide de l'API standard ou de la pm path org.example.packagename
, qui affiche les chemins d'accĂšs de tous les fichiers APK de l'application.
# pm path com.android.egg package:/system/app/EasterEgg/EasterEgg.apk
Ătant donnĂ© que les applications prĂ©installĂ©es sont stockĂ©es dans la section systĂšme (dont le contenu, je me souviens, ne change que lorsque le systĂšme est mis Ă jour), elles ne peuvent pas ĂȘtre supprimĂ©es (Ă la place, Android offre la possibilitĂ© de les "dĂ©sactiver"). NĂ©anmoins, la mise Ă jour des applications prĂ©installĂ©es est prise en charge - dans ce cas, un dossier dans /data/app
est créé pour la nouvelle version et la version fournie avec le systÚme reste dans /system/app
. Dans ce cas, l'utilisateur a la possibilité de "supprimer les mises à jour" d'une telle application, en revenant à la version depuis /system/app
.
Une autre caractéristique des applications préinstallées est qu'elles peuvent recevoir des autorisations «systÚme» spéciales . Par exemple, les applications tierces n'ont pas l'autorisation DELETE_PACKAGES
, qui vous permet de supprimer d'autres applications, REBOOT
, qui vous permet de redémarrer le systÚme, et READ_FRAME_BUFFER
, qui permet un accĂšs direct au contenu de l'Ă©cran. Ces autorisations ont un niveau de protection de signature , c'est-Ă -dire que l'application essayant d'y accĂ©der doit ĂȘtre signĂ©e avec la mĂȘme clĂ© que l'application ou le service dans lequel elles sont implĂ©mentĂ©es - dans ce cas, puisque ces autorisations sont implĂ©mentĂ©es par le systĂšme, la clĂ© avec laquelle elle est signĂ©e Version Android
Pour stocker des données modifiables, chaque application se voit attribuer un dossier dans /data/data
(par exemple, /data/data/com.google.android.youtube
pour YouTube). Seule l'application elle-mĂȘme a accĂšs Ă ce dossier, c'est-Ă -dire uniquement l'UID sous lequel cette application est lancĂ©e (si l'application utilise plusieurs UID ou si plusieurs applications utilisent un UID commun, tout peut ĂȘtre plus compliquĂ©). Dans ce dossier, les applications enregistrent les paramĂštres, le cache (dans les sous-dossiers shared_prefs
et cache
, respectivement) et toutes les autres données dont ils ont besoin:
# 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>
Le systĂšme connaĂźt l'existence du dossier de cache
et peut le nettoyer seul s'il n'y a pas assez d'espace. Lorsque vous désinstallez l'application, le dossier entier de cette application est complÚtement supprimé et l'application ne laisse aucune trace. Alternativement, les deux utilisateurs peuvent explicitement faire dans les paramÚtres:

Ce stockage de données alloué à chaque application est appelé stockage interne.
De plus, Android dispose d'un autre type de stockage - le stockage dit externe ( stockage externe - ce nom reflĂšte l'idĂ©e originale que le stockage externe devrait ĂȘtre situĂ© sur une carte SD externe insĂ©rĂ©e dans le tĂ©lĂ©phone). En fait, le stockage externe joue le rĂŽle du dossier de dĂ©part de l' utilisateur - des dossiers tels que Documents, TĂ©lĂ©chargement, Musique et Images s'y trouvent, c'est le stockage externe que les gestionnaires de fichiers ouvrent comme dossier par dĂ©faut, il permet Ă l'ordinateur d'accĂ©der au contenu du stockage externe lorsqu'il est connectĂ© par cĂąble.
# ls /sdcard Alarms Download Podcasts Android Movies Ringtones Books Music Subtitles DCIM Notifications bluetooth Documents Pictures
Contrairement au stockage interne, divisé en dossiers d'applications individuelles, le stockage externe est une «zone commune»: toute application qui a reçu l'autorisation appropriée de l'utilisateur y a un accÚs complet. Comme je l'ai mentionné dans un article précédent, les applications telles que le gestionnaire de fichiers doivent demander cette autorisation; et pour la plupart des autres applications, il est préférable d'utiliser l'intention avec l'action ACTION_GET_CONTENT
, donnant à l'utilisateur la possibilité de choisir le fichier souhaité dans le gestionnaire de fichiers systÚme.
De nombreuses applications préfÚrent enregistrer certains de leurs fichiers internes, qui sont volumineux (par exemple, un cache d'images téléchargées et de fichiers audio) dans un stockage externe. Pour ce faire, Android alloue aux applications dans des dossiers de stockage externes avec des noms de la forme Android/data/com.google.android.youtube
. L'application elle - mĂȘme n'a pas besoin d' autorisation pour accĂ©der Ă l'intĂ©gralitĂ© du stockage externe pour accĂ©der Ă ce dossier (puisque son UID est dĂ©fini comme propriĂ©taire de ce dossier), mais toute autre application qui a cette autorisation peut accĂ©der Ă ce dossier, donc cela vaut vraiment la peine d'ĂȘtre utilisĂ© Uniquement pour le stockage de donnĂ©es publiques et non critiques. Lorsque vous dĂ©sinstallez l'application, le systĂšme supprimera Ă©galement son dossier spĂ©cial dans le stockage externe; mais les fichiers créés par des applications dans un stockage externe en dehors de leur dossier spĂ©cial sont considĂ©rĂ©s comme appartenant Ă l'utilisateur et restent en place aprĂšs la suppression de l'application qui les a créés.
Comme je l'ai mentionnĂ© ci-dessus, il Ă©tait initialement supposĂ© que le stockage externe serait en fait situĂ© sur une carte SD externe, car Ă ce moment-lĂ , le volume des cartes SD Ă©tait considĂ©rablement plus Ă©levĂ© que la quantitĂ© de mĂ©moire intĂ©grĂ©e dans les tĂ©lĂ©phones (dans le mĂȘme HTC Dream, il n'Ă©tait que de 256 mĂ©gaoctets, dont environ 90 mĂ©gaoctets ont Ă©tĂ© allouĂ©s Ă la section des donnĂ©es ). Depuis lors, de nombreuses conditions ont changĂ©; les tĂ©lĂ©phones modernes n'ont souvent pas de fente pour carte SD, mais une Ă©norme quantitĂ© de mĂ©moire interne est installĂ©e par les normes mobiles (par exemple, dans le Samsung Galaxy Note 9, elle peut aller jusqu'Ă 512 gigaoctets ).
Par conséquent, dans Android moderne, le stockage interne et externe sont presque toujours situés dans la mémoire interne. Le chemin réel le long duquel le stockage externe est situé dans le systÚme de fichiers prend la forme /data/media/0
( un stockage externe séparé est créé pour chaque utilisateur du périphérique, et le numéro dans le chemin correspond au numéro d'utilisateur). Pour des raisons de compatibilité, le stockage externe est également accessible via les /sdcard
, /mnt/sdcard
, /storage/self/primary
, /storage/emulated/0
, plusieurs chemins commençant par /mnt/runtime/
et quelques autres.
D'un autre cĂŽtĂ©, de nombreux appareils ont toujours un emplacement pour carte SD. La carte SD insĂ©rĂ©e dans l'appareil Android peut ĂȘtre utilisĂ©e comme un disque externe ordinaire (sans la transformer en stockage interne ou externe du systĂšme) - enregistrez-y des fichiers, ouvrez des fichiers stockĂ©s dessus, utilisez-la pour transfĂ©rer des fichiers vers d'autres appareils, etc. De plus, Android vous permet «d'emprunter» une carte SD et d'y placer du stockage interne et externe (c'est ce qu'on appelle le stockage empruntĂ© - stockage adoptĂ© ). Dans le mĂȘme temps, le systĂšme reformate la carte SD et chiffre son contenu - les donnĂ©es qui y sont stockĂ©es ne peuvent pas ĂȘtre lues en la connectant Ă un autre appareil.

Vous pouvez en savoir plus sur tout cela, par exemple, dans cet article et dans la documentation officielle pour les développeurs d'applications et les créateurs d'assemblages Android .
Chargement
L'approche traditionnelle de la sécurité des systÚmes informatiques se limite à protéger le systÚme contre les attaques logicielles. On pense que si un attaquant a un accÚs physique à un ordinateur, le jeu est déjà perdu : il peut avoir un accÚs complet à toutes les données qui y sont stockées. Pour ce faire, il lui suffit, par exemple, d'exécuter sur cet ordinateur un systÚme d'exploitation arbitraire contrÎlé par lui, qui lui permet de contourner toutes les restrictions imposées par le systÚme "principal" de droits, ou de connecter directement le disque de données à un autre appareil. Si vous le souhaitez, un attaquant peut laisser l'ordinateur en état de fonctionnement, mais corriger le systÚme installé sur celui-ci, installer des portes dérobées arbitraires, des enregistreurs de frappe, etc.
C'est la protection contre les attaques logicielles qui se concentre sur le modĂšle de restriction des droits des utilisateurs sous Unix (et la technologie sandbox de l'application basĂ©e sur celle-ci dans Android); La restriction Unix en soi ne protĂšge pas le systĂšme contre un utilisateur qui s'est rendu dans la salle des serveurs et a obtenu un accĂšs physique Ă l'ordinateur. Et si des serveurs multi-utilisateurs sĂ©rieux peuvent et doivent ĂȘtre protĂ©gĂ©s contre tout accĂšs physique non autorisĂ© aux ordinateurs personnels - et en particulier aux appareils mobiles - cette approche n'est tout simplement pas applicable.
Il y a deux façons d'essayer d'améliorer la situation avec une protection contre un attaquant qui a obtenu un accÚs physique à l'appareil:
- PremiĂšrement, il est possible de crypter les donnĂ©es stockĂ©es sur un disque , empĂȘchant ainsi un attaquant d'accĂ©der aux donnĂ©es lui-mĂȘme, mĂȘme s'il a accĂšs au contenu du disque.
- DeuxiÚmement, il est possible de limiter en quelque sorte la capacité de charger des systÚmes d'exploitation arbitraires sur l'appareil , forçant un attaquant à passer par des procédures d'authentification et d'autorisation dans le systÚme installé.
C'est à ces deux zones de protection que le modÚle de démarrage sécurisé sous Android est associé.
Démarrage vérifié
Le processus de démarrage Android est conçu de sorte que, d'une part, il ne permet pas aux attaquants de charger un systÚme d'exploitation arbitraire sur l'appareil, d'autre part, il permet aux utilisateurs d'installer des assemblages Android personnalisés (et d'autres systÚmes).
Tout d'abord, les appareils Android, contrairement aux ordinateurs de bureau, ne permettent généralement pas à un utilisateur (ou à un attaquant) de démarrer à partir d'un support externe; à la place, le chargeur de démarrage installé sur le périphérique (chargeur de démarrage) démarre immédiatement. Bootloader est un programme relativement simple dont les tùches (lors du chargement en mode normal) comprennent:
- initialisation et configuration de Trusted Execution Environment (par exemple ARM TrustZone),
- trouver des partitions de mémoire interne qui stockent des images du noyau Linux et des initramfs,
- vérification de leur intégrité (intégrité) - sinon le téléchargement est interrompu par un message d'erreur - en vérifiant la signature numérique du constructeur,
- charger le noyau et initramfs dans la mémoire et transférer le contrÎle au noyau.
Clignotement, déverrouillage, démarrage rapide et récupération
De plus, le chargeur de démarrage prend en charge des fonctionnalités supplémentaires pour la mise à jour et la réinstallation du systÚme.
-, (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.