Zygote adalah proses dalam sistem operasi Android yang bertindak sebagai root semua proses sistem dan aplikasi dengan antarmuka biner aplikasi (ABI) yang sama.
Di perangkat modern, seperti Pixel 7 dan yang lebih baru, ada proses Zygote 64-bit. Selain itu, ada WebView Zygote untuk ABI utama, yang merupakan Zygote khusus yang berisi library dan resource khusus untuk proses yang menjalankan WebView.
Berikut adalah tugas yang dilakukan Zygote:
Daemon init menghasilkan proses Zygote saat Android OS diinisialisasi. Pada beberapa sistem arsitektur ganda, dua proses Zygote (64-bit dan 32-bit) akan dibuat. Halaman ini hanya membahas satu sistem arsitektur.
Zygote dapat langsung membuat proses yang disebut proses aplikasi tidak khusus (USAP) atau menunggu untuk membuat proses sesuai kebutuhan aplikasi. Opsi pertama harus diaktifkan melalui properti sistem atau perintah Android debug bridge. Untuk informasi selengkapnya tentang cara mengonfigurasi Zygote agar segera membuat proses, lihat Mengaktifkan kumpulan proses aplikasi yang tidak khusus .
Jika kumpulan USAP diaktifkan di perangkat Anda:
- Server sistem menggunakan soket domain Unix untuk terhubung ke USAP yang tersedia dari kumpulan. Server sistem meminta USAP dikonfigurasi sebelumnya untuk penggunaan aplikasi dengan mengubah ID proses (PID), cgroup, dan informasi lainnya.
- Setelah selesai melakukan prakonfigurasi, USAP akan membalas ke server sistem dengan PID.
- Jika aplikasi menempati salah satu USAP ini, USAP tersebut tidak lagi menjadi bagian dari kumpulan. Saat kumpulan mencapai satu atau kurang USAP dalam kumpulan, Zygote akan mengisi ulang kumpulan dengan USAP baru.
Jika Zygote Anda membuat proses menggunakan evaluasi lambat:
- Server sistem menerima perintah bahwa aplikasi memerlukan proses.
- Server sistem menggunakan soket domain Unix untuk mengirim perintah ke Zygote yang sesuai.
- Zygote melakukan fork pada proses dan mengubah PID, cgroup, dan informasi lainnya.
- Setelah proses selesai, proses ini akan mengirimkan PID kembali ke Zygote yang kemudian meneruskannya kembali ke server sistem.
Mengaktifkan kumpulan USAP
Untuk mengaktifkan penggunaan kumpulan USAP, lakukan salah satu tindakan berikut:
Tetapkan properti sistem
dalvik.vm.usap_pool_enabled
ketrue
di/build/make/target/product/runtime_libart.mk
.Jalankan perintah berikut:
adb shell am broadcast -a \"com.google.android.gms.phenotype.FLAG_OVERRIDE\" --es package \"com.google.android.platform.runtime_native\" --es user \"\*\" --esa flags \"usap_pool_enabled\" --esa values \"true\" --esa types \"string\" com.google.android.gms
Jika fitur ini diaktifkan, setiap Zygote akan mempertahankan kumpulan proses yang di-fork yang menjalankan bagian proses startup aplikasi yang tidak bergantung pada aplikasi.
Memecahkan masalah Zygote
Bagian ini berisi solusi untuk masalah terkait Zygote.
Zygote mengalami error
Jika perangkat tidak dimulai ulang dengan benar dan log atau laporan error menampilkan masalah pada Zygote, kemungkinan karena Anda melakukan perubahan baru-baru ini yang menyebabkan initd atau server sistem mengalami error. Memperbaiki kode akan memperbaiki masalah.
Penolakan SELinux atau Kegagalan IO
Zygote sangat memperhatikan kebersihan deskripsi file di seluruh batas
proses. Jika deskripsi file ada pada waktu fork, tetapi tidak ada dalam
daftar yang diizinkan, kami menggunakan panggilan sistem dup
ke /dev/null
untuk mencegah deskripsi file
yang di-cache digunakan secara tidak sengaja untuk mengakses file yang baru dibuka.
Jika Anda membuat perubahan framework yang mencakup upaya memuat resource ke Zygote, dan Anda menerima penolakan SELinux atau kegagalan IO:
Untuk deskripsi file tanpa nama, sertakan deskripsi file dalam vektor
fds_to_ignore
saatRestat
dipanggil.Untuk deskripsi file bernama:
- Edit
WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cpp
. - Tambahkan jalur ke daftar yang diizinkan untuk file yang terbuka.
- Edit