
Halo semuanya! Kami meluangkan waktu untuk melanjutkan serangkaian artikel tentang perangkat Android internal. Pada artikel ini, saya akan berbicara tentang proses boot Android, tentang isi sistem file, tentang bagaimana data pengguna dan aplikasi disimpan, tentang akses root, tentang portabilitas Android builds, dan tentang masalah fragmentasi.
Artikel Seri:
Paket
Seperti yang saya katakan sebelumnya, arsitektur Android dibangun di sekitar aplikasi. Ini adalah aplikasi yang memainkan peran penting dalam perangkat banyak bagian sistem, itu adalah untuk interaksi yang harmonis dari aplikasi yang aktivitas dan model niat dibangun, dan model keamanan Android didasarkan pada isolasi aplikasi. Dan jika manajer aktivitas terlibat dalam mengatur interaksi komponen aplikasi, maka manajer paket bertanggung jawab untuk menginstal, memperbarui, dan mengelola hak aplikasi (manajer paket - Anda dapat menyebutnya di shell dengan perintah pm
).
Seperti namanya "manajer paket", pada level ini aplikasi sering disebut paket . Paket didistribusikan dalam format APK (paket Android) - arsip zip khusus. Setiap paket memiliki nama (juga dikenal sebagai ID aplikasi ) yang secara unik mengidentifikasi aplikasi ini (tetapi bukan versi spesifiknya - sebaliknya, nama-nama versi berbeda dari paket harus cocok, jika tidak mereka akan dianggap sebagai paket terpisah). Nama paket biasanya ditulis dalam notasi dari nama DNS terbalik - misalnya, aplikasi YouTube menggunakan nama paket com.google.android.youtube
. Seringkali nama paket cocok dengan namespace yang digunakan dalam kode Java-nya, tetapi Android tidak memerlukannya (di samping itu, file APK aplikasi biasanya menyertakan pustaka pihak ketiga, namespace yang, tentu saja, tidak ada hubungannya dengan nama paket sama sekali, siapa yang menggunakannya).
Setiap APK selama perakitan harus ditandatangani oleh pengembang menggunakan tanda tangan digital. Android memeriksa keberadaan tanda tangan ini ketika menginstal aplikasi, dan ketika memperbarui aplikasi yang sudah diinstal, itu juga membandingkan kunci publik dengan mana versi lama dan baru ditandatangani; mereka harus cocok, yang memastikan bahwa versi baru dibuat oleh pengembang yang sama dengan yang lama. (Jika pemeriksaan ini tidak tersedia, penyerang dapat membuat paket dengan nama yang sama dengan aplikasi yang ada, meyakinkan pengguna untuk menginstalnya dengan "memperbarui" aplikasi, dan mendapatkan akses ke data aplikasi ini.)
Pembaruan paket itu sendiri adalah pemasangan versi baru bukan versi lama dengan pelestarian data dan izin yang diterima dari pengguna. Anda juga dapat "menurunkan versi" aplikasi ke versi yang lebih lama, tetapi pada saat yang sama, secara default, Android menghapus data yang disimpan oleh versi baru, karena versi lama mungkin tidak dapat bekerja dengan format data yang digunakan versi baru.
Seperti yang sudah saya katakan, biasanya kode masing-masing aplikasi dijalankan di bawah pengguna Unix sendiri (UID), yang memastikan saling isolasi. Beberapa aplikasi mungkin secara eksplisit meminta Android untuk menggunakan UID umum untuk mereka, yang akan memungkinkan mereka untuk secara langsung mengakses file satu sama lain dan bahkan, jika diinginkan, berjalan dalam proses yang sama.
Meskipun biasanya satu paket sesuai dengan satu file APK, Android mendukung paket yang terdiri dari beberapa APK (ini disebut APK split, atau APK split ). Ini adalah dasar dari fitur "ajaib" Android, seperti pemuatan dinamis modul aplikasi tambahan (modul fitur dinamis ) dan Instant Run di Android Studio (pembaruan otomatis kode aplikasi yang sedang berjalan tanpa instal ulang penuh dan, dalam banyak kasus, bahkan tanpa memulai ulang).

Sistem file
Perangkat sistem file adalah salah satu masalah paling penting dan menarik dalam arsitektur sistem operasi, dan perangkat sistem file di Android tidak terkecuali.
Yang menarik adalah, pertama, sistem file mana yang digunakan, yaitu, di mana format isi file disimpan pada disk bersyarat (dalam kasus Android, ini biasanya memori flash dan kartu SD) dan bagaimana kernel sistem memberikan dukungan untuk format ini . Kernel Linux yang digunakan di Android, sampai taraf tertentu, mendukung sejumlah besar sistem file yang berbeda - dari yang digunakan pada Windows FAT dan NTFS dan yang digunakan di Darwin oleh HFS + dan APFS modern - ke jaringan 9pfs dari Plan 9. Ada banyak “asli »Untuk sistem file Linux - misalnya, Btrfs dan keluarga besar.
Standar de facto untuk Linux telah lama ext4 , digunakan secara default oleh sebagian besar distribusi Linux populer. Oleh karena itu, tidak ada yang tidak terduga dalam kenyataan bahwa ini digunakan di Android. Beberapa majelis (dan beberapa penggemar) juga menggunakan F2FS (Flash-Friendly File System), dioptimalkan khusus untuk memori flash (namun, dengan kelebihannya, semuanya tidak begitu jelas ).
Kedua, apa yang disebut tata letak sistem file menarik - lokasi folder sistem dan pengguna dan file dalam sistem file. Tata letak sistem file di "Linux biasa" layak mendapatkan deskripsi yang lebih rinci (yang dapat ditemukan, misalnya, di tautan ini ); Saya akan menyebutkan di sini hanya beberapa direktori terpenting:
/home
folder /home
toko pengguna rumah; di sini, di berbagai folder tersembunyi ( .cache
, .cache
, .config
, dan lainnya), program menyimpan pengaturan, data, dan cache, khusus untuk pengguna,/boot
menyimpan kernel Linux dan gambar initramfs (sistem file boot khusus),/usr
(akan lebih logis untuk memanggil /system
) menyimpan bagian utama dari sistem itu sendiri, termasuk perpustakaan, file yang dapat dieksekusi, file konfigurasi, serta sumber daya - tema untuk antarmuka, ikon, isi manual sistem, dll.,/etc
(akan lebih logis untuk memanggil /config
) menyimpan pengaturan seluruh sistem,/dev
menyimpan file perangkat dan file khusus lainnya (misalnya, soket /dev/log
),/var
menyimpan data yang bisa diubah - log, cache sistem, konten basis data, dll.
Android menggunakan tata letak sistem file yang serupa tetapi terasa berbeda. Inilah beberapa bagian terpentingnya:
/data
menyimpan data yang bisa berubah,- Kernel dan gambar initramfs disimpan pada partisi flash terpisah, yang tidak dapat dipasang pada sistem file utama.
/system
cocok /usr
dan menyimpan sistem,/vendor
- analog /system
dirancang untuk file khusus untuk perakitan Android ini, dan tidak termasuk dalam Android "standar",/dev
, seperti pada "Linux normal", menyimpan file perangkat dan file khusus lainnya.
Direktori yang paling menarik adalah /data
dan /system
. Isi /system
menggambarkan sistem dan berisi sebagian besar file penyusunnya. /system
terletak pada bagian terpisah dari memori flash, yang dipasang secara default dalam mode read-only; biasanya data di dalamnya berubah hanya ketika sistem diperbarui. /data
juga terletak di bagian yang terpisah dan menjelaskan keadaan yang dapat diubah dari perangkat tertentu, termasuk pengaturan pengguna, aplikasi yang diinstal dan data mereka, cache, dll. Menghapus semua data pengguna, yang disebut pengaturan ulang pabrik, dengan skema ini hanya untuk menghapus konten bagian data ; sistem yang belum tersentuh tetap diinstal di bagian sistem .
# 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)
Aplikasi - yaitu APK mereka, file odex (dikompilasi sebelumnya kode Java) dan perpustakaan ELF - diinstal di /system/app
(untuk aplikasi yang dikirimkan dengan sistem) atau di /data/app
(untuk yang diinstal pengguna aplikasi). Saat membuat rakitan Android, setiap aplikasi yang sudah diinstalasi dialokasikan folder dengan nama form /system/app/Terminal
, dan untuk aplikasi yang diinstal pengguna selama instalasi, folder dibuat yang namanya dimulai dengan nama paket mereka. Misalnya, aplikasi YouTube disimpan dalam folder dengan nama seperti / data / /data/app/com.google.android.youtube-bkJAtUtbTuzvAioW-LEStg==/
- /data/app/com.google.android.youtube-bkJAtUtbTuzvAioW-LEStg==/
- /data/app/com.google.android.youtube-bkJAtUtbTuzvAioW-LEStg==/
.
Tentang sufiks iniAkhiran dalam nama folder aplikasi adalah 16 byte acak yang disandikan dalam Base64. Menggunakan akhiran ini mencegah aplikasi lain dari "menebak" jalan ke aplikasi yang mereka seharusnya tidak sadari. Pada prinsipnya, daftar aplikasi yang diinstal pada perangkat dan jalurnya bukanlah rahasia - ia dapat diperoleh melalui API standar - tetapi dalam beberapa kasus (yaitu, untuk aplikasi Instan) akses ke data ini dibatasi.
Akhiran ini memiliki tujuan lain. Setiap kali aplikasi diperbarui, APK baru dipasang di folder dengan akhiran baru, setelah itu folder lama dihapus. Sebelum versi 8.0 Oreo, ini adalah tujuan akhiran, dan alih-alih byte acak , -1
dan -2
digunakan secara bergantian (misalnya, /data/app/com.google.android.youtube-2
untuk YouTube).
Path lengkap ke folder aplikasi di /system/app
atau /data/app
dapat diperoleh dengan menggunakan API standar atau pm path org.example.packagename
, yang menampilkan path dari semua file APK aplikasi.
# pm path com.android.egg package:/system/app/EasterEgg/EasterEgg.apk
Karena aplikasi yang sudah diinstal sebelumnya disimpan di bagian sistem (isinya, saya ingat, hanya berubah ketika sistem diperbarui), mereka tidak dapat dihapus (sebagai gantinya, Android menyediakan kemampuan untuk "menonaktifkan" mereka). Namun demikian, memperbarui aplikasi yang sudah diinstal sebelumnya didukung - dalam hal ini, folder di /data/app
dibuat untuk versi baru, dan versi yang disertakan dengan sistem tetap berada di /system/app
. Dalam hal ini, pengguna memiliki kesempatan untuk "menghapus pembaruan" dari aplikasi semacam itu, kembali ke versi dari /system/app
.
Fitur lain dari aplikasi yang diinstal sebelumnya adalah mereka dapat menerima izin "sistem" khusus . Misalnya, aplikasi pihak ketiga tidak mendapatkan izin DELETE_PACKAGES
, yang memungkinkan Anda untuk menghapus aplikasi lain, REBOOT
, yang memungkinkan Anda untuk me-restart sistem, dan READ_FRAME_BUFFER
, yang memungkinkan akses langsung ke konten layar. Izin ini memiliki tingkat perlindungan tanda tangan , yaitu, aplikasi yang mencoba mengaksesnya harus ditandatangani dengan kunci yang sama dengan aplikasi atau layanan di mana mereka diimplementasikan - dalam hal ini, karena izin ini diimplementasikan oleh sistem, kunci dengan mana ia ditandatangani Android build
Untuk menyimpan data yang dapat diubah, setiap aplikasi dialokasikan folder di /data/data
(misalnya, /data/data
/data/data/com.google.android.youtube
untuk YouTube). Hanya aplikasi itu sendiri yang memiliki akses ke folder ini - yaitu, hanya UID di mana aplikasi ini diluncurkan (jika aplikasi menggunakan beberapa UID, atau jika beberapa aplikasi menggunakan UID umum, semuanya bisa lebih rumit). Dalam folder ini, aplikasi menyimpan pengaturan, cache (masing-masing dalam shared_prefs
dan cache
subfolder) dan data lain yang mereka butuhkan:
# 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>
Sistem tahu tentang keberadaan folder cache
dan dapat membersihkannya sendiri jika tidak ada ruang yang cukup. Saat Anda menghapus instalasi aplikasi, seluruh folder aplikasi ini sepenuhnya dihapus, dan aplikasi tidak meninggalkan jejak. Atau, kedua pengguna dapat secara eksplisit melakukannya di pengaturan:

Penyimpanan data ini dialokasikan untuk setiap aplikasi disebut penyimpanan internal.
Selain itu, Android memiliki jenis penyimpanan lain - yang disebut penyimpanan eksternal ( penyimpanan eksternal - nama ini mencerminkan gagasan awal bahwa penyimpanan eksternal harus diletakkan pada kartu SD eksternal yang dimasukkan ke dalam telepon). Faktanya, penyimpanan eksternal memainkan peran folder rumah pengguna - folder seperti Documents, Download, Music and Pictures berada di sana, itu adalah penyimpanan eksternal yang dibuka oleh manajer file sebagai folder default, itu memungkinkan komputer untuk mengakses konten penyimpanan eksternal ketika terhubung dengan kabel.
# ls /sdcard Alarms Download Podcasts Android Movies Ringtones Books Music Subtitles DCIM Notifications bluetooth Documents Pictures
Berbeda dengan penyimpanan internal, dibagi menjadi folder aplikasi individual, penyimpanan eksternal adalah "zona umum": aplikasi apa pun yang telah menerima izin yang sesuai dari pengguna memiliki akses penuh ke sana. Seperti yang saya sebutkan di artikel sebelumnya, aplikasi seperti manajer file harus meminta izin ini; dan untuk sebagian besar aplikasi lain, lebih baik menggunakan maksud dengan tindakan ACTION_GET_CONTENT
, memberi pengguna kesempatan untuk memilih file yang diinginkan dalam manajer file sistem.
Banyak aplikasi lebih suka menyimpan beberapa file internal mereka, yang berukuran besar (misalnya, cache gambar yang diunduh dan file audio) di penyimpanan eksternal. Untuk melakukan ini, Android mengalokasikan ke aplikasi dalam folder penyimpanan eksternal dengan nama dari bentuk Android/data/com.google.android.youtube
. Aplikasi itu sendiri tidak memerlukan izin untuk mengakses seluruh penyimpanan eksternal untuk mengakses folder ini (karena UID-nya ditetapkan sebagai pemilik folder ini), tetapi aplikasi lain yang memiliki izin ini dapat mengakses folder ini, sehingga sangat layak digunakan Hanya untuk menyimpan data publik dan non-kritis. Ketika Anda menghapus aplikasi, sistem juga akan menghapus folder khusus di penyimpanan eksternal; tetapi file yang dibuat oleh aplikasi dalam penyimpanan eksternal di luar folder khusus mereka dianggap milik pengguna dan tetap di tempatnya setelah penghapusan aplikasi yang membuatnya.
Seperti yang saya sebutkan di atas, pada awalnya diasumsikan bahwa penyimpanan eksternal sebenarnya akan ditempatkan pada kartu SD eksternal, karena pada saat itu volume kartu SD secara signifikan lebih besar daripada jumlah memori yang terpasang pada telepon (dalam HTC Dream hanya 256 megabyte, di antaranya sekitar 90 megabita dialokasikan ke bagian data ). Sejak itu, banyak kondisi telah berubah; ponsel modern sering tidak memiliki slot kartu SD, tetapi sejumlah besar memori internal dipasang oleh standar seluler (misalnya, pada Samsung Galaxy Note 9 dapat mencapai 512 gigabytes ).
Oleh karena itu, dalam Android modern, hampir selalu penyimpanan internal dan eksternal terletak di memori internal. Jalur nyata di mana penyimpanan eksternal berada dalam sistem file mengambil bentuk /data/media/0
(penyimpanan eksternal terpisah dibuat untuk setiap pengguna perangkat, dan nomor di jalur tersebut sesuai dengan nomor pengguna). Untuk tujuan kompatibilitas, penyimpanan eksternal juga dapat diakses melalui jalur /sdcard
, /mnt/sdcard
, /storage/self/primary
, /storage/emulated/0
, beberapa jalur yang dimulai dengan /mnt/runtime/
, dan beberapa lainnya.
Di sisi lain, banyak perangkat masih memiliki slot kartu SD. Kartu SD yang dimasukkan ke perangkat Android dapat digunakan sebagai drive eksternal biasa (tanpa mengubahnya menjadi penyimpanan internal atau eksternal sistem) - simpan file ke dalamnya, buka file yang tersimpan di dalamnya, gunakan untuk mentransfer file ke perangkat lain, dll. Selain itu, Android memungkinkan Anda untuk "meminjam" kartu SD dan menempatkan penyimpanan internal dan eksternal di atasnya (ini disebut penyimpanan yang dipinjam - penyimpanan yang diadopsi ). Pada saat yang sama, sistem memformat ulang kartu SD dan mengenkripsi isinya - data yang tersimpan di dalamnya tidak dapat dibaca dengan menghubungkannya ke perangkat lain.

Anda dapat membaca lebih lanjut tentang semua ini, misalnya, di pos ini dan di dokumentasi resmi untuk pengembang aplikasi dan pembuat perakitan Android .
Memuat
Pendekatan tradisional untuk keamanan sistem komputer terbatas untuk melindungi sistem dari serangan perangkat lunak. Dipercayai bahwa jika penyerang memiliki akses fisik ke komputer, gim tersebut sudah hilang : ia dapat memperoleh akses penuh ke data apa pun yang tersimpan di dalamnya. Untuk ini, cukup baginya, misalnya, untuk menjalankan di komputer ini sistem operasi sewenang-wenang yang dikendalikan olehnya, yang memungkinkannya untuk memintas pembatasan apa pun yang diberlakukan oleh sistem hak "utama", atau secara langsung menghubungkan disk data ke perangkat lain. Jika diinginkan, penyerang dapat meninggalkan komputer dalam kondisi dapat dioperasikan, tetapi tambal sistem yang diinstal di atasnya, instal backdoors sewenang-wenang, keyloggers, dll.
Ini adalah perlindungan terhadap serangan perangkat lunak yang difokuskan pada model pembatasan hak pengguna di Unix (dan teknologi kotak pasir aplikasi yang didasarkan pada itu di Android); Pembatasan Unix itu sendiri tidak melindungi sistem dari pengguna yang telah berjalan ke ruang server dan telah mendapatkan akses fisik ke komputer. Dan jika server multi-pengguna yang serius dapat dan harus dilindungi dari akses fisik yang tidak sah, ke komputer pribadi - dan terutama perangkat seluler - pendekatan ini sama sekali tidak berlaku.
Ada dua cara untuk mencoba memperbaiki situasi dengan perlindungan terhadap penyerang yang telah mendapatkan akses fisik ke perangkat:
- Pertama, adalah mungkin untuk mengenkripsi data yang disimpan pada disk , sehingga mencegah penyerang mendapatkan akses ke data itu sendiri, bahkan jika ia memiliki akses ke isi disk.
- Kedua, dimungkinkan untuk membatasi kemampuan memuat sistem operasi yang sewenang-wenang pada perangkat , memaksa penyerang melakukan prosedur otentikasi dan otorisasi dalam sistem yang diinstal.
Dengan dua bidang perlindungan inilah maka model boot aman di Android dikaitkan.
Boot yang terverifikasi
Proses boot Android dirancang sehingga, di satu sisi, itu tidak memungkinkan penyerang mengunduh OS sewenang-wenang pada perangkat, di sisi lain, memungkinkan pengguna untuk menginstal rakitan Android yang disesuaikan (dan sistem lainnya).
Pertama-tama, perangkat Android, tidak seperti komputer "desktop", biasanya tidak mengizinkan pengguna (atau penyerang) melakukan booting dari media eksternal; sebagai gantinya, bootloader yang diinstal pada perangkat (bootloader) segera dimulai. Bootloader adalah program yang relatif sederhana yang tugasnya (saat memuat dalam mode normal) meliputi:
- inisialisasi dan konfigurasi Lingkungan Eksekusi Tepercaya (mis. ARM TrustZone),
- menemukan partisi memori internal yang menyimpan gambar dan initramf kernel Linux,
- verifikasi integritas (integritas) mereka - jika tidak, unduhan terganggu dengan pesan kesalahan - dengan memverifikasi tanda tangan digital pabrikan,
- memuat kernel dan initramf ke dalam memori dan mentransfer kendali ke kernel.
Flashing, membuka kunci, fastboot dan pemulihan
Selain itu, bootloader mendukung fungsionalitas tambahan untuk memperbarui dan menginstal ulang sistem.
-, (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.