Zygote — это процесс в операционной системе Android, который действует как корневой элемент всех процессов системы и приложений с одним и тем же двоичным интерфейсом приложения (ABI).
На современных устройствах, таких как Pixel 7 и новее, присутствует 64-битный процесс Zygote. Кроме того, существует WebView Zygote для основного ABI, который представляет собой специализированный Zygote, содержащий библиотеки и ресурсы, специфичные для процессов, запускающих WebViews.
Вот задачи, которые выполняет Зигота:
Демон инициализации запускает процесс 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, контрольную группу и другую информацию.
- Когда процесс завершен, он отправляет 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.
Зигота терпит крах
Если ваше устройство не перезагружается должным образом, а ваши журналы или отчеты о сбоях показывают проблемы с Zygote, вероятно, это связано с тем, что вы внесли недавнее изменение, которое приводит к сбою initd или системного сервера. Исправление вашего кода должно решить проблему.
Отказы SELinux или сбои ввода-вывода
Zygote уделяет особое внимание гигиене файловых дескрипторов за пределами границ процесса. Если файловые дескрипторы присутствуют во время разветвления, но не в списке разрешенных, мы используем системный вызов dup
для /dev/null
, чтобы предотвратить непреднамеренное использование кэшированных файловых дескрипторов для доступа к вновь открываемым файлам.
Если вы вносите изменения в структуру, в том числе пытаетесь загрузить ресурсы в Zygote, и получаете отказы SELinux или сбои ввода-вывода:
Для безымянных файловых дескрипторов включите их в вектор
fds_to_ignore
при вызовеRestat
.Для именованных файловых дескрипторов:
- Отредактируйте
WORKING_DIRECTORY /frameworks/base/core/jni/fd_utils.cpp
. - Добавьте путь в список разрешенных для открытых файлов.
- Отредактируйте
Zygote — это процесс в операционной системе Android, который выступает в качестве корня всех процессов системы и приложений с одним и тем же двоичным интерфейсом приложения (ABI).
На современных устройствах, таких как Pixel 7 и новее, присутствует 64-битный процесс Zygote. Кроме того, существует WebView Zygote для основного ABI, который представляет собой специализированный Zygote, содержащий библиотеки и ресурсы, специфичные для процессов, запускающих WebViews.
Вот задачи, которые выполняет Зигота:
Демон инициализации запускает процесс 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, контрольную группу и другую информацию.
- Когда процесс завершен, он отправляет 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.
Зигота терпит крах
Если ваше устройство не перезагружается должным образом, а ваши журналы или отчеты о сбоях показывают проблемы с Zygote, вероятно, это связано с тем, что вы внесли недавнее изменение, которое приводит к сбою initd или системного сервера. Исправление вашего кода должно решить проблему.
Отказы SELinux или сбои ввода-вывода
Zygote уделяет особое внимание гигиене файловых дескрипторов за пределами границ процесса. Когда файловые дескрипторы присутствуют во время разветвления, но не в списке разрешенных, мы используем системный вызов dup
для /dev/null
, чтобы предотвратить непреднамеренное использование кэшированных файловых дескрипторов для доступа к вновь открываемым файлам.
Если вы вносите изменения в структуру, в том числе пытаетесь загрузить ресурсы в Zygote, и получаете отказы SELinux или сбои ввода-вывода:
Для безымянных файловых дескрипторов включите их в вектор
fds_to_ignore
при вызовеRestat
.Для именованных файловых дескрипторов:
- Отредактируйте
WORKING_DIRECTORY /frameworks/base/core/jni/fd_utils.cpp
. - Добавьте путь в список разрешенных для открытых файлов.
- Отредактируйте
Zygote — это процесс в операционной системе Android, который действует как корневой элемент всех процессов системы и приложений с одним и тем же двоичным интерфейсом приложения (ABI).
На современных устройствах, таких как Pixel 7 и новее, присутствует 64-битный процесс Zygote. Кроме того, существует WebView Zygote для основного ABI, который представляет собой специализированный Zygote, содержащий библиотеки и ресурсы, специфичные для процессов, запускающих WebViews.
Вот задачи, которые выполняет Зигота:
Демон инициализации запускает процесс 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, контрольную группу и другую информацию.
- Когда процесс завершен, он отправляет 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.
Зигота терпит крах
Если ваше устройство не перезагружается должным образом, а ваши журналы или отчеты о сбоях показывают проблемы с Zygote, вероятно, это связано с тем, что вы внесли недавнее изменение, которое приводит к сбою initd или системного сервера. Исправление вашего кода должно решить проблему.
Отказы SELinux или сбои ввода-вывода
Zygote уделяет особое внимание гигиене файловых дескрипторов за пределами границ процесса. Если файловые дескрипторы присутствуют во время разветвления, но не в списке разрешенных, мы используем системный вызов dup
для /dev/null
, чтобы предотвратить непреднамеренное использование кэшированных файловых дескрипторов для доступа к вновь открываемым файлам.
Если вы вносите изменения в структуру, в том числе пытаетесь загрузить ресурсы в Zygote, и получаете отказы SELinux или сбои ввода-вывода:
Для безымянных файловых дескрипторов включите их в вектор
fds_to_ignore
при вызовеRestat
.Для именованных файловых дескрипторов:
- Отредактируйте
WORKING_DIRECTORY /frameworks/base/core/jni/fd_utils.cpp
. - Добавьте путь в список разрешенных для открытых файлов.
- Отредактируйте