Zygote هي عملية في نظام التشغيل Android تعمل بمثابة الجذر لجميع عمليات النظام والتطبيقات التي تستخدم واجهة ملف ثنائي التطبيق (ABI) نفسها.
على الأجهزة الحديثة، مثل هواتف Pixel 7 والإصدارات الأحدث، تتوفّر عملية Zygote بإصدار 64 بت. بالإضافة إلى ذلك، هناك WebView Zygote لوحدة ABI الأساسية، وهو مكتبة مخصّصة لـ Zygote تحتوي على مكتبات وموارد خاصة بالعمليات التي تعمل على WebViews.
في ما يلي المهام التي ينفّذها Zygote:
ينشئ الخادم الدائم init عملية Zygote عند بدء تشغيل نظام التشغيل Android. في بعض أنظمة البنية المزدوجة، يتم إنشاء عمليتَي Zygote (بإصدارَي 64 بت و32 بت). لا تتناول هذه الصفحة سوى أنظمة الهندسة المعمارية الفردية.
يمكن أن تنشئ عملية Zygote على الفور عمليات تُعرف باسم عمليات التطبيقات غير المتخصّصة (USAP) أو تنتظر لإنشاء العمليات حسب الحاجة من التطبيقات. يجب تفعيل الخيار السابق من خلال خاصيّة نظام أو أمر Android Debug Bridge. لمزيد من المعلومات عن ضبط Zygote لإنشاء العمليات على الفور، يُرجى الاطّلاع على تفعيل حزمة عمليات التطبيقات غير المتخصّصة .
في حال تفعيل مجموعة USAP على جهازك:
- يستخدم خادم النظام مقبس نطاق Unix للاتصال بأحد عناوين UPD المتاحة من مجموعة. يطلب خادم النظام أن يتم ضبط USAP مسبقًا لاستخدام التطبيق من خلال تغيير معرّف العملية (PID) ومجموعة المعالجة المركزية ومعلومات أخرى.
- عند اكتمال الإعداد المُسبَق لبروتوكول USAP، يردّ على خادم النظام مع إدراج رقم تعريف العملية.
- وعندما يشغل أحد التطبيقات أحد هذه الطلبات، لن يعود الطلب جزءًا من المجموعة. عندما يصل عدد وحدات USAP في المجموعة إلى وحدة واحدة أو أقل، يُعيد Zygote تعبئة المجموعة بوحدات USAP جديدة.
إذا كان Zygote ينشئ عمليات باستخدام التقييم البطيء:
- يتلقّى خادم النظام أمرًا بأنّ أحد التطبيقات يحتاج إلى عملية.
- يستخدم خادم النظام مقبس نطاق Unix لإرسال أمر إلى عملية Zygote المناسبة.
- ينشئ Zygote عملية فرعية ويغيّر رقم تعريف العملية والمجموعة الفرعية للعمليات وغيرها من المعلومات.
- عند اكتمال العملية، يتم إرسال رقم تعريف العملية إلى 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.
تعطُّل Zygote
إذا لم تتم إعادة تشغيل جهازك بشكل صحيح وظهرت في السجلات أو تقارير الأعطال مشاكل في Zygote، من المحتمل أن يكون ذلك بسبب إجراء تغيير مؤخرًا يؤدي إلى تعطُّل initd أو خادم النظام. من المفترض أن يؤدي إصلاح الرمز إلى حلّ المشكلة.
عمليات رفض SELinux أو أخطاء I/O
يهتمّ Zygote بنظافة ملف الوصف على مستوى حدود
العملية. عندما تكون أوصاف الملفات متوفّرة في وقت التفرع ولكنّها ليست في قائمة
السماح، نستخدم طلب نظام dup
إلى /dev/null
لمنع استخدام أوصاف
الملفات المخزّنة مؤقتًا عن غير قصد للوصول إلى الملفات التي تم فتحها حديثًا.
إذا كنت تُجري تغييرات على إطار العمل تشمل محاولة تحميل موارد في Zygote، وكنت تتلقّى رفضات SELinux أو أخطاء I/O:
بالنسبة إلى أوصاف الملفات غير المُسمّاة، أدرِج أوصاف الملفات في متجه
fds_to_ignore
عند استدعاءRestat
.بالنسبة إلى أوصاف الملفات المُسمّاة:
- تعديل
WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cpp
- أضِف المسار إلى القائمة المسموح بها للملفات المفتوحة.
- تعديل