لمحة عن عمليات Zygote

Zygote هي عملية في نظام التشغيل Android تعمل بمثابة الجذر لجميع عمليات النظام والتطبيقات التي تستخدم واجهة برمجة التطبيقات الثنائية (ABI) نفسها.

على الأجهزة الحديثة، مثل Pixel 7 والإصدارات الأحدث، تتوفّر عملية Zygote بإصدار 64 بت. بالإضافة إلى ذلك، هناك WebView Zygote لوحدة ABI الأساسية، وهو مكتبة مخصّصة لـ Zygote تحتوي على مكتبات وموارد خاصة بالعمليات التي تعمل على WebViews.

في ما يلي المهام التي ينفّذها الزيجوت:

  1. ينشئ الخادم الخفي init عملية Zygote عند بدء تشغيل نظام التشغيل Android. في بعض أنظمة البنية المزدوجة، يتم إنشاء عمليتَي Zygote (بإصدارَي 64 بت و32 بت). تتناول هذه الصفحة الأنظمة المعمارية الفردية فقط.

  2. يمكن أن تنشئ عملية Zygote على الفور عمليات تُعرف باسم عمليات التطبيقات غير المتخصّصة (USAP) أو تنتظر لإنشاء العمليات حسب الحاجة من التطبيقات. يجب تفعيل الخيار السابق من خلال موقع على النظام أو أمر جسر تصحيح أخطاء Android. لمزيد من المعلومات عن ضبط Zygote لإنشاء العمليات على الفور، يُرجى الاطّلاع على تفعيل حزمة عمليات التطبيقات غير المتخصّصة .

    • إذا كان حوض USAP مفعَّلاً على جهازك:

      1. يستخدم خادم النظام مقبس نطاق Unix للاتصال بأحد عناوين UPD المتاحة من مجموعة. يطلب خادم النظام أن يتم تكوين برنامج USAP مسبقًا لاستخدام التطبيق من خلال تغيير معرف العملية (PID) ومجموعة المشاركة ومعلومات أخرى.
      2. عند اكتمال الإعداد المُسبَق لبروتوكول USAP، يردّ على خادم النظام مع إدراج معرّف PID.
      3. وعندما يشغل أحد التطبيقات أحد هذه الطلبات، لن يعود الطلب جزءًا من المجموعة. عندما يصل المسبح إلى واحد أو أقل من USAP في المسبح، يقوم Zygote بتجديد المسبح بأدوات USAP جديدة.
    • إذا كان Zygote ينشئ عمليات باستخدام التقييم البطيء:

      1. يتلقى خادم النظام أمرًا يحتاج إلى معالجة.
      2. يستخدم خادم النظام مقبس نطاق Unix لإرسال أمر إلى عملية Zygote المناسبة.
      3. ينشئ Zygote عملية فرعية ويغيّر رقم تعريف العملية والمجموعة الفرعية للعمليات وغيرها من المعلومات.
      4. عند اكتمال العملية، يتم إرسال رقم تعريف العملية إلى 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.

  • بالنسبة إلى أدوات وصف الملفات المُعنونة:

    1. تعديل WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cpp
    2. أضِف المسار إلى القائمة المسموح بها للملفات المفتوحة.