Zygote 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 podstawowego ABI, czyli wyspecjalizowany proces Zygote, który zawiera biblioteki i zasoby specyficzne dla procesów uruchamiających widoki WebView.
Oto zadania wykonywane przez proces Zygote:
Demon init uruchamia proces Zygote podczas inicjowania systemu operacyjnego Android. W niektórych systemach z dwiema architekturami uruchamiane są 2 procesy Zygote (64-bitowy i 32-bitowy). Ta strona dotyczy tylko systemów z jedną architekturą.
Proces Zygote może natychmiast uruchamiać procesy nazywane niespecjalistycznymi procesami aplikacji (USAP) lub czekać na uruchomienie procesów w zależności od potrzeb aplikacji. Tę pierwszą opcję należy włączyć za pomocą właściwości systemowej lub polecenia Android Debug Bridge. Więcej informacji o konfigurowaniu procesu Zygote do natychmiastowego uruchamiania procesów znajdziesz w artykule Włączanie puli niespecjalistycznych procesów aplikacji .
Jeśli na urządzeniu jest włączona pula USAP:
- Serwer systemowy używa gniazda domeny Unix do łączenia się z dostępnym procesem USAP z puli. Serwer systemowy żąda, aby proces USAP był wstępnie skonfigurowany do użycia przez aplikację, poprzez zmianę identyfikatora procesu (PID), cgroup i innych informacji.
- Gdy proces USAP zakończy wstępną konfigurację, odpowiada serwerowi systemowemu za pomocą identyfikatora PID.
- Gdy aplikacja zajmuje jeden z tych procesów USAP, proces ten nie jest już częścią puli. Gdy w puli pozostanie 1 lub mniej procesów USAP, proces Zygote uzupełnia pulę o nowe procesy USAP.
Jeśli proces Zygote uruchamia procesy za pomocą leniwej ewaluacji:
- Serwer systemowy otrzymuje polecenie, że aplikacja potrzebuje procesu.
- Serwer systemowy używa gniazda domeny Unix do wysłania polecenia do odpowiedniego procesu Zygote.
- Proces Zygote rozwidla proces i zmienia identyfikator PID, cgroup i inne informacje.
- Gdy proces zostanie zakończony, wysyła identyfikator PID z powrotem do procesu Zygote, który przekazuje go do serwera systemowego.
Włączanie puli USAP
Aby włączyć korzystanie z puli USAP, wykonaj jedną z tych czynności:
Ustaw właściwość systemową
dalvik.vm.usap_pool_enablednatruew pliku/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.
Awaria procesu Zygote
Jeśli urządzenie nie uruchamia się ponownie prawidłowo, a w logach lub raportach o awariach widać problemy z procesem Zygote, prawdopodobnie wynika to z niedawnej zmiany, która powoduje awarię initd lub serwera systemowego. Naprawienie kodu powinno rozwiązać ten problem.
Odmowy SELinux lub błędy wejścia/wyjścia
Proces Zygote jest szczególnie wrażliwy na higienę deskryptorów plików w granicach procesów. Gdy deskryptory plików są obecne w momencie rozwidlenia, ale nie znajdują się na liście dozwolonych, używamy wywołania systemowego dup do /dev/null, aby zapobiec przypadkowemu użyciu buforowanych deskryptorów plików do uzyskania dostępu do nowo otwartych plików.
Jeśli wprowadzasz zmiany w frameworku, które obejmują próbę wczytania 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_ignorepodczas wywoływania funkcjiRestat.W przypadku nazwanych deskryptorów plików:
- Edytuj
WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cpp. - Dodaj ścieżkę do listy dozwolonych dla otwartych plików.
- Edytuj