Zygote — это процесс в операционной системе Android, который выступает в качестве корневого процесса для всех системных процессов и процессов приложений, имеющих один и тот же двоичный интерфейс приложения (ABI).
На современных устройствах, таких как Pixel 7 и более поздние модели, используется 64-битный процесс Zygote. Кроме того, существует WebView Zygote для основного ABI, представляющий собой специализированный Zygote, содержащий библиотеки и ресурсы, специфичные для процессов, запускающих WebView.
Вот задачи, которые выполняет зигота:
Демон инициализации запускает процесс Zygote при инициализации ОС Android. В некоторых системах с двойной архитектурой запускаются два процесса Zygote (64-битный и 32-битный). На этой странице рассматриваются только системы с одной архитектурой.
Zygote может немедленно запускать процессы, называемые неспециализированными процессами приложений (USAP) , или ожидать запуска процессов по мере необходимости для приложений. Первый вариант необходимо включить через системное свойство или команду отладки Android. Дополнительную информацию о настройке Zygote для немедленного запуска процессов см. в разделе «Включение пула неспециализированных процессов приложений» .
Если пул USAP включен на вашем устройстве:
- Системный сервер использует сокет домена Unix для подключения к доступному USAP из пула. Системный сервер запрашивает предварительную настройку USAP для использования приложением, изменяя идентификатор процесса (PID), cgroup и другую информацию.
- После завершения предварительной настройки USAP отправляет системному серверу ответ с PID.
- Когда приложение занимает один из этих USAP, этот USAP больше не является частью пула. Когда в пуле остается один или менее USAP, Zygote пополняет пул новыми USAP.
Если ваш Zygote запускает процессы с использованием отложенной оценки :
- Системный сервер получает команду о том, что приложению необходим процесс.
- Системный сервер использует сокет домена Unix для отправки команды соответствующей зиготе.
- Zygote создает дочерний процесс и изменяет PID, cgroup и другую информацию.
- После завершения процесса PID отправляется обратно в Zygote, которая затем передает его обратно на системный сервер.
Включить пул USAP
Чтобы включить использование пула USAP, выполните одно из следующих действий:
Установите для системного свойства
dalvik.vm.usap_pool_enabledзначениеtrueв/build/make/target/product/runtime_libart.mk.Выполните следующую команду:
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
При включении этой функции каждый Zygote поддерживает пул порожденных процессов, которые выполняют независимые от приложения части процесса запуска приложения.
Устранение неполадок, связанных с зиготой.
В этом разделе представлены решения проблем, связанных с зиготой.
Зигота рушится
Если ваше устройство не перезагружается должным образом, а в журналах или отчетах о сбоях отображаются проблемы с Zygote, вероятно, это связано с недавними изменениями, которые приводят к сбою initd или системного сервера. Исправление кода должно решить проблему.
Отказы SELinux или сбои ввода-вывода
Zygote уделяет особое внимание гигиене файловых дескрипторов на границах процессов. Если файловые дескрипторы присутствуют во время создания дочернего процесса, но отсутствуют в списке разрешенных, мы используем dup системный вызов к /dev/null , чтобы предотвратить непреднамеренное использование кэшированных файловых дескрипторов для доступа к недавно открытым файлам.
Если вы вносите изменения в фреймворк, которые включают попытку загрузки ресурсов в Zygote, и получаете отказы SELinux или ошибки ввода-вывода:
Для файловых дескрипторов без имени, включите их в вектор
fds_to_ignoreпри вызове функцииRestat.Для именованных файловых дескрипторов:
- Отредактируйте
WORKING_DIRECTORY /frameworks/base/core/jni/fd_utils.cpp. - Добавьте путь в список разрешенных для открытия файлов.
- Отредактируйте