Zygota to proces w systemie operacyjnym Android, który jest korzeniem wszystkich procesów systemowych i procesów aplikacji z tym samym interfejsem binarnym aplikacji (ABI).
Na nowoczesnych urządzeniach, takich jak Pixel 7 i nowsze, działa 64-bitowy proces Zygote. Oprócz tego istnieje WebView Zygote dla głównego interfejsu ABI, który jest wyspecjalizowanym procesem Zygote zawierającym biblioteki i zasoby specyficzne dla procesów uruchamiających komponenty WebView.
Zygota wykonuje te zadania:
Demon init uruchamia proces Zygote po zainicjowaniu systemu operacyjnego Android. W niektórych systemach o podwójnej architekturze uruchamiane są 2 procesy Zygote (64-bitowy i 32-bitowy). Ta strona dotyczy tylko systemów o jednej architekturze.
Proces Zygote może od razu tworzyć procesy zwane niespecjalistycznymi procesami aplikacji (USAP) lub czekać na utworzenie procesów w miarę potrzeb aplikacji. Pierwszą opcję należy włączyć za pomocą właściwości systemu lub polecenia Android Debug Bridge. Więcej informacji o konfigurowaniu procesu Zygote do natychmiastowego tworzenia procesów znajdziesz w artykule Włączanie puli niespecjalizowanych procesów aplikacji .
Jeśli pula USAP jest włączona na urządzeniu:
- Serwer systemowy używa gniazda domeny Unix, aby połączyć się z dostępnym USAP z puli. Serwer systemowy żąda, aby USAP był wstępnie skonfigurowany do użycia przez aplikację, poprzez zmianę identyfikatora procesu (PID), grupy kontrolnej i innych informacji.
- Gdy USAP zakończy wstępną konfigurację, odpowiada serwerowi systemowemu za pomocą identyfikatora PID.
- Gdy aplikacja zajmuje jeden z tych USAP-ów, nie jest on już częścią puli. Gdy w puli zostanie co najmniej 1 USAP, proces Zygote uzupełni pulę nowymi USAP-ami.
Jeśli proces Zygote tworzy procesy za pomocą leniwej ewaluacji:
- Serwer systemowy otrzymuje polecenie, że aplikacja potrzebuje procesu.
- Serwer systemowy używa gniazda domeny Unix do wysyłania polecenia do odpowiedniego procesu Zygote.
- Proces Zygote rozwidla proces i zmienia PID, cgroup i inne informacje.
- Po zakończeniu procesu wysyła identyfikator PID z powrotem do procesu Zygote, który przekazuje go z powrotem do serwera systemowego.
Włącz pulę USAP
Aby włączyć korzystanie z puli USAP, wykonaj jedną z tych czynności:
Ustaw właściwość systemową
dalvik.vm.usap_pool_enablednatruew/build/make/target/product/runtime_libart.mk.Uruchom to polecenie:
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
Gdy ta funkcja jest włączona, każdy proces Zygote utrzymuje pulę rozwidlonych procesów, które wykonują niezależne od aplikacji części procesu uruchamiania aplikacji.
Rozwiązywanie problemów z procesem Zygote
Ta sekcja zawiera rozwiązania problemów związanych z procesem Zygote.
Proces Zygote ulega awarii
Jeśli urządzenie nie uruchamia się ponownie prawidłowo, a w dziennikach lub raportach o awariach widać problemy z procesem Zygote, prawdopodobnie wynika to z ostatniej zmiany, która powoduje awarię procesu initd lub serwera systemowego. Naprawienie kodu powinno rozwiązać problem.
Odmowy SELinux lub błędy wejścia/wyjścia
Proces Zygote jest bardzo wyczulony na kwestie związane z deskryptorami plików w różnych procesach. Jeśli deskryptory plików są obecne w momencie rozwidlenia, ale nie znajdują się na liście dozwolonych, używamy wywołania systemowego dup, aby zapobiec niezamierzonemu użyciu buforowanych deskryptorów plików do uzyskania dostępu do nowo otwartych plików./dev/null
Jeśli wprowadzasz zmiany w platformie, które obejmują próbę załadowania zasobów do procesu Zygote, i otrzymujesz odmowy SELinux lub błędy wejścia/wyjścia:
W przypadku nienazwanych deskryptorów plików uwzględnij je w wektorze
fds_to_ignore, gdy wywoływana jest funkcjaRestat.W przypadku nazwanych deskryptorów plików:
- Edytuj pakiet
WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cpp. - Dodaj ścieżkę do listy dozwolonych dla otwartych plików.
- Edytuj pakiet