Zygote adalah proses di sistem operasi Android yang bertindak sebagai root dari 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 memunculkan proses Zygote saat Android OS diinisialisasi. Pada beberapa sistem arsitektur ganda, dua proses Zygote (64-bit dan 32-bit) akan di-spawn. Halaman ini hanya mencakup sistem arsitektur tunggal.
Zygote dapat langsung membuat proses yang disebut proses aplikasi yang tidak dikhususkan (USAP) atau menunggu untuk membuat proses sesuai kebutuhan aplikasi. Opsi pertama harus diaktifkan melalui properti sistem atau perintah Android Debug Bridge. Untuk mengetahui informasi selengkapnya tentang mengonfigurasi Zygote agar langsung membuat proses, lihat Mengaktifkan kumpulan proses aplikasi yang tidak terspesialisasi .
Jika kumpulan USAP diaktifkan di perangkat Anda:
- Server sistem menggunakan soket domain Unix untuk terhubung ke USAP yang tersedia dari kumpulan. Server sistem meminta agar USAP dikonfigurasi sebelumnya untuk penggunaan aplikasi dengan mengubah ID (PID), cgroup, dan informasi lainnya dari proses.
- Setelah pra-konfigurasi USAP selesai, USAP akan membalas server sistem dengan PID.
- Jika aplikasi menempati salah satu USAP ini, USAP tersebut tidak lagi menjadi bagian dari kumpulan. Saat pool mencapai satu atau lebih sedikit USAP di pool, Zygote akan mengisi ulang pool dengan USAP baru.
Jika Zygote Anda memunculkan 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 membuat fork proses dan mengubah PID, cgroup, dan informasi lainnya.
- Setelah proses selesai, PID akan dikirim kembali ke Zygote yang kemudian meneruskannya kembali ke server sistem.
Aktifkan kumpulan USAP
Untuk mengaktifkan penggunaan pool USAP, lakukan salah satu hal 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 Anda tidak melakukan reboot dengan benar dan log atau laporan error Anda menunjukkan masalah pada Zygote, kemungkinan hal ini terjadi karena Anda baru-baru ini melakukan perubahan yang menyebabkan initd atau server sistem mengalami error. Memperbaiki kode akan menyelesaikan masalah.
Penolakan SELinux atau Kegagalan IO
Zygote sangat memperhatikan kebersihan deskriptor file di seluruh batas
proses. Jika deskriptor file ada pada waktu fork, tetapi tidak ada dalam daftar yang diizinkan, kami menggunakan panggilan sistem dup
ke /dev/null
untuk mencegah deskriptor 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 dalam Zygote, dan Anda menerima penolakan SELinux atau kegagalan IO:
Untuk deskriptor file yang tidak disebutkan namanya, sertakan deskriptor file dalam vektor
fds_to_ignore
saatRestat
dipanggil.Untuk deskriptor file bernama:
- Edit
WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cpp
. - Tambahkan jalur ke daftar yang diizinkan untuk file yang terbuka.
- Edit