Zygote è un processo nel sistema operativo Android che funge da root di tutti i processi di sistema e delle app con la stessa interfaccia binaria dell'applicazione (ABI).
Sui dispositivi moderni, come Pixel 7 e modelli successivi, è presente un processo Zygote a 64 bit. Inoltre, esiste WebView Zygote per l'ABI principale, ovvero uno Zygote specializzato che contiene librerie e risorse specifiche per i processi che eseguono WebView.
Di seguito sono riportate le attività eseguite da Zygote:
Il daemon init genera il processo Zygote quando viene inizializzato il sistema operativo Android. Su alcuni sistemi a doppia architettura, vengono generati due processi Zygote (a 64 bit e 32 bit). Questa pagina riguarda solo i sistemi a singola architettura.
Zygote può generare immediatamente processi chiamati processi app non specializzati (USAP) o attendere la generazione dei processi in base alle esigenze delle applicazioni. La prima opzione deve essere abilitata tramite una proprietà di sistema o un comando Android Debug Bridge. Per ulteriori informazioni sulla configurazione di Zygote per generare immediatamente i processi, vedi Abilitare il pool di processi app non specializzati .
Se il pool USAP è abilitato 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 del processo (PID), il cgroup e altre informazioni.
- Al termine della preconfigurazione, l'USAP risponde al server di sistema con il PID.
- Quando un'applicazione occupa uno di questi USAP, l'USAP non fa più parte del pool. Quando il pool raggiunge uno o meno USAP, Zygote lo riempie 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 un socket di dominio Unix per inviare un comando allo Zygote appropriato.
- Zygote esegue il fork del processo e modifica il PID, il cgroup e altre informazioni.
- Al termine del processo, invia il PID a Zygote, che a sua volta lo invia al server di sistema.
Abilitare il pool USAP
Per abilitare l'utilizzo del pool USAP, procedi in uno dei seguenti modi:
Imposta la proprietà di sistema
dalvik.vm.usap_pool_enabledsutruein/build/make/target/product/runtime_libart.mk.Esegui questo 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à è abilitata, ogni Zygote mantiene un pool di processi con fork che eseguono le parti del processo di avvio dell'applicazione indipendenti dall'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 di I/O
Zygote è particolarmente attento all'igiene dei descrittori del file tra i limiti dei processi. Quando i descrittori di file sono presenti al momento del fork, ma non in una lista consentita, utilizziamo una chiamata di sistema dup a /dev/null per impedire l'utilizzo involontario dei descrittori di file memorizzati nella cache per accedere ai file appena aperti.
Se stai apportando 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_ignorequando viene chiamatoRestat.Per i descrittori di file denominati:
- Modifica
WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cpp. - Aggiungi il percorso alla lista consentita per i file aperti.
- Modifica