Zygote è un processo nel sistema operativo Android che funge da radice di tutti i processi di sistema e delle app con la stessa ABI (Application Binary Interface).
Sui dispositivi moderni, come Pixel 7 e modelli successivi, è presente un processo Zygote a 64 bit. Inoltre, c'è WebView Zygote per l'ABI principale, ovvero una Zygote specializzata che contiene librerie e risorse specifiche per i processi che eseguono WebView.
Di seguito sono riportate le attività eseguite da Zygote:
Il daemon di inizializzazione genera il processo Zygote quando il sistema operativo Android viene inizializzato. In alcuni sistemi con architettura duale vengono generati due processi Zygote (uno a 64 e uno a 32 bit). Questa pagina riguarda solo sistemi con un'unica architettura.
Lo Zygote può generare immediatamente processi chiamati processi delle app non specializzate (USAP) o attendere che vengano generati processi secondo le necessità delle applicazioni. La prima opzione deve essere attivata tramite una proprietà di sistema o un comando Android Debug Bridge. Per maggiori informazioni sulla configurazione di Zygote per generare immediatamente i processi, consulta Abilitare il pool di processi dell'app non specializzati .
Se il pool USAP è attivo sul tuo dispositivo:
- Il server di sistema utilizza un socket di dominio Unix per connettersi a un USAP disponibile da un pool. Il server di sistema richiede che l'USAP sia preconfigurato per l'utilizzo dell'applicazione modificando l'ID (PID), il cgroup e altre informazioni del processo.
- Al termine della preconfigurazione, l'USAP risponde al server di sistema con il PID.
- Quando un'applicazione occupa uno di questi USAP, quest'ultimo non fa più parte del pool. Quando il pool raggiunge uno o meno USAP, Zygote lo reintegra con nuovi USAP.
Se Zygote genera processi utilizzando la valutazione lazy:
- Il server di sistema riceve un comando che indica che un'app ha bisogno di un processo.
- Il server di sistema utilizza una socket di dominio Unix per inviare un comando a Zygote appropriato.
- Zygote esegue il fork del processo e modifica il PID, il cgroup e altre informazioni.
- Una volta completato, il PID viene inviato a Zygote, che quindi lo ritrasmette al server di sistema.
Attiva il pool USAP
Per attivare l'utilizzo del pool USAP, esegui una delle seguenti operazioni:
Imposta la proprietà di sistema
dalvik.vm.usap_pool_enabled
sutrue
in/build/make/target/product/runtime_libart.mk
.Esegui il seguente comando:
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
Quando questa funzionalità è attivata, ogni Zygote gestisce un pool di processi forkati che eseguono le parti indipendenti dall'applicazione del processo di avvio dell'applicazione.
Risolvere i problemi di Zygote
Questa sezione contiene soluzioni ai problemi relativi a Zygote.
Zygote si arresta in modo anomalo
Se il dispositivo non si riavvia correttamente e i log o i report sugli arresti anomali mostrano problemi con Zygote, è probabile che tu abbia apportato una modifica recente che causa l'arresto anomalo di initd o del server di sistema. La correzione del codice dovrebbe risolvere il problema.
Rifiuti SELinux o errori I/O
Zygote è molto esigente in termini di igiene dei descrittori file nei confini dei processi. Quando i descrittori dei file sono presenti al momento del fork, ma non in una lista consentita, utilizziamo una chiamata di sistema dup
a /dev/null
per impedire che i descrittori dei file memorizzati nella cache vengano utilizzati involontariamente per accedere ai file appena aperti.
Se apporti modifiche al framework che includono il tentativo di caricare risorse in Zygote e ricevi rifiuti SELinux o errori di I/O:
Per i descrittori di file senza nome, includili nel vettore
fds_to_ignore
quando viene chiamatoRestat
.Per i descrittori file denominati:
- Modifica
WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cpp
. - Aggiungi il percorso alla lista consentita per i file aperti.
- Modifica