Hasta donde sé, Zygote es iniciado por app_process64
y app_process32
donde 64 es para el zygote primario que inicia los servicios del sistema debido a la bandera start-system-server
.
Como podemos ver a continuación en el método static void main
de frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
, verifica la bandera start-system-server
, ejecuta
el servidor de sistema bifurcado y sale debido a la declaración return;
debajo de él, y nunca ejecuta el runSelectLoop
que en realidad entra en un bucle infinito escuchando conexiones que solicitan iniciar nuevas aplicaciones. Solo app_process32
sin la bandera start-system-server
no entrará en la sentencia de control para ejecutar
el servidor de sistema bifurcado, y en su lugar, ejecutará el runSelectLoop
. ¿Significa esto que todos los servicios del sistema son inherentemente de 64 bits mientras que todas las aplicaciones de Android son inherentemente de 32 bits?
Este código es de la rama AOSP: Android-14.0.0_r21
:
// código redactado anteriormente
zygoteServer = new ZygoteServer(isPrimaryZygote);
if (startSystemServer) {
Runnable r = forkSystemServer(abiList, zygoteSocketName, zygoteServer);
// {@code r == null} en el proceso padre (zygote), y {@code r != null} en el
// proceso hijo (system_server).
if (r != null) {
r.run();
return;
}
}
Log.i(TAG, "Aceptando conexiones de sockets de comando");
// El bucle select devuelve temprano en el proceso hijo después de una bifurcación y
// se queda en un bucle para siempre en el zygote.
caller = zygoteServer.runSelectLoop(abiList);
// código redactado abajo