Tentang proses Zygote

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:

  1. Daemon init memunculkan proses Zygote saat Android OS diinisialisasi. Di beberapa sistem arsitektur ganda, dua proses Zygote (64-bit dan 32-bit) akan dibuat. Halaman ini hanya mencakup sistem arsitektur tunggal.

  2. 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:

      1. 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.
      2. Setelah selesai melakukan prakonfigurasi, USAP akan membalas ke server sistem dengan PID.
      3. Jika aplikasi menempati salah satu USAP ini, USAP tersebut tidak lagi menjadi bagian dari kumpulan. Saat kumpulan mencapai satu atau kurang USAP di dalam kolam, Zygote akan mengisi kembali kumpulan dengan USAP baru.
    • Jika Zygote Anda membuat proses menggunakan evaluasi lambat:

      1. Server sistem menerima perintah bahwa aplikasi memerlukan proses.
      2. Server sistem menggunakan soket domain Unix untuk mengirim perintah ke Zygote yang sesuai.
      3. Zygote akan mengambil proses dan mengubah PID, cgroup, dan informasi lainnya.
      4. Setelah proses selesai, proses ini akan mengirim 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 ke true 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
    

Saat fitur ini diaktifkan, setiap Zygote akan mempertahankan kumpulan proses bercabang yang melakukan bagian yang tidak bergantung pada aplikasi dari proses startup 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 deskriptor file ada pada waktu fork tetapi tidak 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 Zygote, dan Anda menerima penolakan SELinux atau kegagalan IO:

  • Untuk deskripsi file tanpa nama, sertakan deskripsi file dalam vektor fds_to_ignore saat Restat dipanggil.

  • Untuk deskriptor file bernama:

    1. Edit WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cpp.
    2. Tambahkan jalur ke daftar yang diizinkan untuk file yang terbuka.