إعداد ART

تناقش هذه الصفحة كيفية ضبط وقت تشغيل Android (ART) وخيارات التجميع. المواضيع سنتناول هنا إعدادات التجميع المسبق لصورة النظام، dex2oat وخيارات التحويل البرمجي، وكيفية مقايضة مساحة قسم النظام، ومساحة قسم البيانات، أدائه.

راجع ART وDalvik وتنسيق Dalvik القابل للتنفيذ للعمل مع ART. راجع جارٍ التحقق سلوك التطبيق في وقت تشغيل Android (ART) لضمان عمل التطبيقات بشكل صحيح.

آلية عمل ART

تستخدم ART تقنية التجميع المسبق (AOT)، بدءًا من Android 7، مزيجًا مختلطًا من البيانات المجمّعة من AOT والترجمة في الوقت المناسب (JIT) ويمكنك تحديد ملف AOT وفقًا لاهتماماتك. الجمع بين جميع أوضاع التنفيذ هذه قابلة للتهيئة وستتم مناقشتها في هذا القسم. على سبيل المثال، تم ضبط أجهزة Pixel على العمل في التدفق التالي:

  1. يتم تثبيت تطبيق في البداية باستخدام ملف بيانات dex (.dm) تم توزيعه بواسطة "متجر Play" الذي يتضمّن ملفًا شخصيًا على السحابة الإلكترونية يجمع ART AOT الأساليب المدرجة في السحابة بك. وإذا تم تثبيت التطبيق بدون ملف بيانات وصفية لـ dex، لن يتم تنفيذ تجميع AOT تنفيذها.
  2. في المرات القليلة الأولى التي يتم فيها تشغيل التطبيق، يتم تفسير الطرق غير المجمعة من خلال AOT. من بين الطرق المفسَّرة، يتم تجميع الطرق التي يتم تنفيذها بشكل متكرر بعد ذلك ضمن JIT. الفن ينشئ ملفًا شخصيًا محليًا استنادًا إلى التنفيذ ويدمجه مع الملف الشخصي على السحابة الإلكترونية (إن كان واحدًا موجود).
  3. عندما يكون الجهاز غير نشِط لفترة قصيرة ويجري شحنه، يتم تشغيل برنامج خفي لتجميع البيانات لإعادة تجميع التطبيق. استنادًا إلى الملف التعريفي المُجمَّع الذي تم إنشاؤه خلال عمليات التشغيل القليلة الأولى.
  4. في عمليات التشغيل اللاحقة للتطبيق، تستخدم ART العناصر التي تم إنشاؤها بواسطة التجميع. يحتوي على المزيد من الرموز البرمجية المجمّعة من خلال AOT، مقارنةً بتلك التي تم إنشاؤها أثناء لا يزال يتم تفسير الطرق غير المجمعة من خلال AOT أو تجميع JIT. عدّل ART الملف الشخصي التثبيت، استنادًا إلى التنفيذ، ويتم اختيار الملف الشخصي من خلال عمليات التشغيل اللاحقة البرنامج الخفي للتجميع.

تتألف ART من برنامج التجميع (أداة dex2oat) وبيئة تشغيل. (libart.so) التي يتم تحميلها أثناء التشغيل. تشير رسالة الأشكال البيانية تستخدم أداة "dex2oat" ملف APK وتنشئ ملفًا واحدًا أو أكثر. ملفات التجميع التي يتم تحميلها في بيئة التشغيل. عدد الملفات والإضافات والأسماء للتغيير عبر الإصدارات، ولكن اعتبارًا من في إصدار Android 8، يتم إنشاء الملفات التالية:

  • .vdex: يحتوي على بعض البيانات الوصفية الإضافية لتسريع عملية التحقق، إلى جانب برمز DEX غير المضغوط لحزمة APK.
  • .odex: يحتوي على رمز AOT مجمّع للطرق في APK.
  • يحتوي .art (optional) على ART داخليًا استخدام تمثيلات لبعض السلاسل والفئات المدرجة في APK لتسريع بدء تشغيل التطبيق.

خيارات التحويل البرمجي

هناك فئتان من خيارات التجميع لـ ART:

  1. تهيئة ذاكرة ROM للنظام: ما هو الرمز الذي يتم تجميعه في بيئة AOT عند إنشاء صورة النظام.
  2. إعدادات بيئة التشغيل: كيفية تجميع ART للتطبيقات وتشغيلها على الخاص بك.

فلاتر برامج التجميع

يتمثل أحد خيارات ART الأساسية لتهيئة هاتين الفئتين في أداة التجميع والفلاتر. تعمل عوامل تصفية التجميع على كيفية قيام ART بتجميع التعليمات البرمجية DEX وهي تم تمرير الخيار إلى أداة dex2oat. بدءًا من Android 8، هناك أربعة فلاتر معتمدة رسميًا:

  • verify: يجب تنفيذ التحقّق من رمز DEX فقط (بدون تجميع AOT).
  • quicken: (حتى الإصدار 11 من نظام Android) يجب تشغيل رمز DEX. والتحقق وتحسين بعض تعليمات DEX للحصول على أداء أفضل للترجمة الفورية.
  • speed: يمكنك تنفيذ عملية التحقّق من رمز DEX وتجميع جميع الطرق باستخدام AOT.
  • speed-profile: تفعيل طريقة التحقّق من رمز DEX وطريقة تجميع AOT مدرجة في ملف ملف شخصي.

إعداد ذاكرة القراءة فقط للنظام

يتم تجميع المكتبات والتطبيقات المثبَّتة مسبقًا من خلال AOT عندما يتم إنشاء صورة نظام. هذا النمط تُسمى dexpreopt. تكون هذه الملفات المجمعة قابلة للاستخدام طالما أن جميع التبعيات تظل بدون تغيير، ولا سيما مسار فئة التمهيد.

ملاحظة: إذا أخذ الجهاز يتم تحديث وحدة النظام، يصبح مسار فئة التمهيد أن تتغير في التحديث التالي، ما يؤدي إلى عرض جميع الملفات القديمة وغير القابلة للاستخدام.

يتوفر عدد من خيارات إصدار ART لتكوين dexpreopt. كيفية الضبط تعتمد هذه الخيارات على مساحة التخزين المتاحة لصورة النظام وعدد التطبيقات المثبتة مسبقًا. يمكن تقسيم ملفات JARs أو APK التي يتم تجميعها في ذاكرة ROM للنظام إلى أربعة الفئات:

  • رمز مسار فئة التشغيل: تم جمعه باستخدام فلتر التجميع في speed-profile حسب الافتراضي.
  • رمز خادم النظام (يُرجى الاطّلاع على PRODUCT_SYSTEM_SERVER_JARS، PRODUCT_APEX_SYSTEM_SERVER_JARS، PRODUCT_STANDALONE_SYSTEM_SERVER_JARS، PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS لاحقًا في هذا المستند):
    • (الإصدار 14 من نظام التشغيل Android والإصدارات الأحدث) تم التجميع باستخدام speed-profile أو يتم تجميعها باستخدام فلتر برنامج التجميع في speed إذا كانت التي لم يتم تقديم ملف التعريف بها.
    • (الإصدار 13 من نظام التشغيل Android والإصدارات الأقدم) تم التجميع باستخدام speed عامل تصفية التجميع افتراضيًا.
    قابل للضبط من خلال PRODUCT_SYSTEM_SERVER_COMPILER_FILTER (يُرجى الاطّلاع لاحقًا في هذا المستند).
  • التطبيقات الأساسية الخاصة بالمنتج (اطّلِع على PRODUCT_DEXPREOPT_SPEED_APPS لاحقًا في هذا الموضوع). مستند): يتم تجميعها باستخدام فلتر التجميع التلقائي في speed.
  • جميع التطبيقات الأخرى: مجمّعة باستخدام فلتر برنامج التجميع في speed-profile تلقائيًا، أو تجميعها باستخدام فلتر برنامج التجميع verify في حال عدم توفُّر ملف شخصي.

    قابل للضبط من خلال PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER (يُرجى الاطّلاع لاحقًا في هذا المستند).

خيارات ملف Makefile

  • WITH_DEXPREOPT
  • ما إذا تم استدعاء dex2oat على رمز DEX المثبّت على صورة النظام ويكون مُفعَّلاً بشكلٍ تلقائي.

  • DONT_DEXPREOPT_PREBUILTS (الإصدار 5 والإصدارات الأحدث من نظام التشغيل Android)
  • يؤدي تفعيل DONT_DEXPREOPT_PREBUILTS إلى منع إنشاء العناصر المُنشأة مسبقًا. غير مكتمل. هذه هي التطبيقات التي تتضمّن include $(BUILD_PREBUILT) المحددة في Android.mk. التخطّي استخدام التطبيقات المصمَّمة مسبقًا والتي من المرجّح أن يتم تحديثها عبر Google Play ويوفر مساحة في صورة النظام ولكنه يضيف إلى وقت التشغيل الأول. تجدر الإشارة إلى أنّ هذا الخيار ليس له أي تأثير. على التطبيقات المصمّمة مسبقًا والمحددة في Android.bp.

  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER (Android 9 وأعلى)
  • يحدد PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER فلتر التجميع التلقائي. للتطبيقات الحالية. هذه التطبيقات محدّدة في اللغة Android.bp أو لها تم تحديد include $(BUILD_PREBUILT) في Android.mk. إذا لم يتم تحديدها، تكون القيمة التلقائية هي speed-profile أو verify إذا لم يتم تحديد القيمة. ولم يتم توفير ملف شخصي.

  • WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY (بما أنّ نظام التشغيل Android 8 MR1)
  • يؤدي تفعيل WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY إلى تفعيل وطبقة تشغيل فئة التشغيل وحاويات خادم النظام.

  • LOCAL_DEX_PREOPT
  • يمكن أيضًا تفعيل Dexpreopt أو إيقافه على أساس تطبيق فردي من خلال لتحديد الخيار LOCAL_DEX_PREOPT في تعريف الوحدة. ويمكن الاستفادة من ذلك في إيقاف إمكانية تفعيل التطبيقات التي قد تتم فورًا تحديثات Google Play نظرًا لأن التحديثات ستعرض الرمز في صورة النظام قديمة. يعد ذلك مفيدًا أيضًا في توفير مساحة على ترقية الإصدار عبر الهواء لأنّ المستخدمين قد يكون لديهم إصدارات أحدث من التطبيقات في قسم البيانات.

    تتيح LOCAL_DEX_PREOPT استخدام القيمتين true أو false من أجل لتفعيل أو إيقاف dexpreopt، على التوالي. بالإضافة إلى ذلك، بإمكان "nostripping" يتم تحديده إذا كان يجب ألا يزيل dexpreopt classes.dex من ملف APK أو JAR. تتم عادةً إزالة هذا الملف لأنه هناك حاجة إليها بعد dexpreopt، إلا أن هذا الخيار الأخير ضروري السماح لتوقيعات حِزم APK التابعة لجهات خارجية بأن تظل صالحة.

  • PRODUCT_DEX_PREOPT_BOOT_FLAGS
  • تمرير الخيارات إلى "dex2oat" للتحكّم في كيفية تشغيل صورة التشغيل مجمعة. ويمكن استخدامها لتحديد قوائم مخصصة لفئات الصور، وتجميعها وقوائم الفئات وعوامل تصفية التجميع.

  • PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
  • تمرير الخيارات إلى dex2oat للتحكّم في كيفية تنفيذ كل الإجراءات باستثناء يتم تجميع صورة بدء التشغيل.

  • PRODUCT_DEX_PREOPT_MODULE_CONFIGS
  • تتيح هذه السياسة تمرير خيارات dex2oat لعنصر معيّن. الوحدة وتكوين المنتج. إنه موضوع في موقع ملف device.mk بواسطة "$(call add-product-dex-preopt-module-config,<modules>,<option>)" حيث <modules> هي قائمة من LOCAL_MODULE LOCAL_PACKAGE اسم لملف JAR وAPK على التوالي.

  • PRODUCT_DEXPREOPT_SPEED_APPS (اعتبارًا من نظام التشغيل Android 8)
  • قائمة التطبيقات التي تمّ تحديدها على أنّها أساسية للمنتجات التي يُستحسن تجميعها باستخدام فلتر التجميع في speed. بالنسبة على سبيل المثال، تحصل التطبيقات الثابتة مثل SystemUI على فرصة استخدام مع البيانات المجمّعة الموجّهة من خلال الملف الشخصي فقط عند إعادة التشغيل في المرة التالية، لذا قد يكون من الأفضل أن تكون هذه التطبيقات مجمعة دائمًا على AOT.

  • PRODUCT_SYSTEM_SERVER_APPS (اعتبارًا من نظام التشغيل Android 8)
  • قائمة التطبيقات التي تم تحميلها من خلال خادم النظام. هذه التطبيقات يتم تجميعها بشكل تلقائي باستخدام فلتر برنامج التجميع في speed.

  • PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD (منذ Android 8)
  • تحديد ما إذا كان سيتم تضمين إصدار تصحيح أخطاء ART على الجهاز بشكل افتراضي، مُفعّل لإصدارات userdebug وeng. يمكن إلغاء السلوك بشكل صريح اضبط الخيار على true أو false.

    يستخدم الجهاز تلقائيًا الإصدار الذي لا يحتوي على تصحيح الأخطاء (libart.so). للتبديل، اضبط خاصية النظام persist.sys.dalvik.vm.lib.2 على libartd.so

  • WITH_DEXPREOPT_PIC (حتى الإصدار 7 من Android)
  • في إصدارات Android من 5.1.0 إلى 6.0.1، بإمكان WITH_DEXPREOPT_PIC المحددة لتفعيل الرمز المستقل عن الموضع (PIC). باستخدام هذا، تم تجميع الرمز من الصورة لا يلزم تغيير مكانه من /system إلى /data/dalvik-cache، ما يوفّر مساحة في قسم البيانات. ومع ذلك، هناك تأثير بسيط في وقت التشغيل لأنّه يوقف عملية التحسين التي تستفيد من التعليمات البرمجية التي تعتمد على الموضع. عادةً ما تحتاج الأجهزة التي تريد توفير مساحة في /data يجب أن تمكّن تجميع PIC.

    في الإصدار Android 7.0، كانت ميزة تجميع PIC مفعَّلة تلقائيًا.

  • WITH_DEXPREOPT_BOOT_IMG_ONLY (حتى Android 7 MR1)
  • تم استبدال هذا الخيار بـ "WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY". تستخدم أيضًا ملفات JAR لخادم النظام مسبقًا.

  • PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
  • يحدد هذا الخيار فلتر المحول البرمجي لخادم النظام.

    • (الإصدار 14 من نظام التشغيل Android والإصدارات الأحدث) في حال عدم تحديده، سيتم عرض speed-profile يمكن استخدام فلتر التجميع أو استخدام فلتر التجميع البرمجي speed إذا لم يكن الملف الشخصي المقدمة.
    • (الإصدار 13 من نظام التشغيل Android والإصدارات الأقدم) في حال عدم تحديده، يمكن لبرنامج التحويل البرمجي speed استخدام عامل التصفية.
    • في حال الضبط على speed، يتم استخدام فلتر المُجمع في speed.
    • في حال الضبط على speed-profile، يتم استخدام فلتر المُجمع في speed-profile، أو يتم استخدام فلتر التجميع البرمجي verify إذا لم يتم توفير ملف شخصي.
    • في حال الضبط على verify، يتم استخدام فلتر المُجمع في verify.

  • PRODUCT_SYSTEM_SERVER_JARS، PRODUCT_APEX_SYSTEM_SERVER_JARS، PRODUCT_STANDALONE_SYSTEM_SERVER_JARS, PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
  • في ما يلي قوائم JAR التي تم تحميلها من خلال خادم النظام. يتم تجميع JAR باستخدام فلتر التجميع المحدد من قِبل PRODUCT_SYSTEM_SERVER_COMPILER_FILTER

    • (مطلوب) PRODUCT_SYSTEM_SERVER_JARS: قائمة ملفات JAR لمسار خادم النظام المفعّلة المنصة (أي كجزء من SYSTEMSERVERCLASSPATH). جارٍ إضافة خادم النظام يجب إدخال ملفات JAR للمسار إلى هذه القائمة. تعذّرت إضافة ملفات JAR لمسار خادم النظام إلى القائمة يؤدي إلى عدم تحميل ملفات JAR هذه.
    • (مطلوب) PRODUCT_APEX_SYSTEM_SERVER_JARS: قائمة ملفات JAR لمسار خادم النظام باستخدام APEX (أي كجزء من SYSTEMSERVERCLASSPATH). التنسيق هو <apex name>:<jar name> إضافة ملفات JAR لمسار خادم نظام APEX إلى هذه القائمة مطلوبة. في حال تعذُّر إضافة ملفات JAR لمسار خادم نظام APEX إلى هذه القائمة، تصبح عدم تحميل ملفات JAR هذه.
    • (اختياري، الإصدار 13 من نظام التشغيل Android والإصدارات الأقدم) PRODUCT_STANDALONE_SYSTEM_SERVER_JARS: قائمة ملفات JAR التي يحمِّلها خادم النظام ديناميكيًا باستخدام أدوات تحميل فئات منفصلة (من خلال SystemServiceManager.startServiceFromJar). إضافة ملفات JAR لخادم النظام المستقل إلى هذه القائمة ليست مطلوبة لكن يوصى بها بشدة لأنها تجعل JAR من التجميع وبالتالي تحقق أداءً جيدًا في بيئة التشغيل.
    • (مطلوب، بدءًا من Android 13) PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS: قائمة ملفات JAR التي يتم عرضها مع APEX التي يحمّلها خادم النظام ديناميكيًا باستخدام برامج تحميل فئات منفصلة (التي من خلال SystemServiceManager.startServiceFromJar أو تم الإعلان عنها على أنها <apex-system-service>). التنسيق هو <apex name>:<jar name> إضافة ملفات JAR المستقلة لخادم نظام APEX إلى هذه القائمة مطلوبة. في حال تعذُّر إضافة ملفات JAR المستقلة لخادم نظام APEX إلى هذه القائمة، تصبح تعذّر بدء التشغيل.

    إعداد مسار التمهيد

    قائمة الفئات المحملة مسبقًا هي قائمة بالفئات التي يهيئها Zygote على لبدء التشغيل. يساهم هذا الإجراء في عدم الاضطرار إلى تشغيل أدوات إعداد الفئات هذه لكل تطبيق. بشكل منفصل، ما يسمح لها ببدء تشغيلها بشكل أسرع ومشاركة الصفحات في الذاكرة. تشير رسالة الأشكال البيانية يتوفّر ملف قائمة الصفوف الذي تم تحميله مسبقًا في frameworks/base/config/preloaded-classes. افتراضيًا، وتحتوي على قائمة تم إعدادها للاستخدام العادي للهاتف. هذا قد أن تكون مختلفة عن الأجهزة الأخرى مثل الأجهزة القابلة للارتداء، ويجب ضبطها وفقًا لذلك. كن حذرًا عند ضبط هذا؛ إضافة الكثير من الفاقد للفئات عند تحميل الصفوف غير المستخدَمة. تفرض إضافة عدد قليل جدًا من الفئات على كل تطبيق أن يكون لديك نسخة خاصة بها، والتي مرة أخرى تهدر الذاكرة.

    مثال على الاستخدام (في device.mk للمنتج):

    PRODUCT_COPY_FILES += <filename>:system/etc/preloaded-classes
    

    ملاحظة: يجب وضع هذا الخط قبل اكتساب أي ملفات إعداد للمنتج تحصل على الملف التلقائي من build/target/product/base.mk

    إعدادات بيئة التشغيل

    خيارات JIT

    تؤثر الخيارات التالية في إصدارات Android فقط حيث يتم تجميع ART JIT متاح.

    • dalvik.vm.usejit: ما إذا كان JIT مفعَّلاً أم لا
    • dalvik.vm.jitinitialsize (القيمة التلقائية 64 كيلوبايت): السعة المبدئية من ذاكرة التخزين المؤقت للرمز. وستزيد ذاكرة التخزين المؤقت للرموز بشكل منتظم عند الحاجة.
    • dalvik.vm.jitmaxsize (القيمة التلقائية 64M): الحد الأقصى لسعة ذاكرة التخزين المؤقت للرموز.
    • dalvik.vm.jitthreshold (القيمة التلقائية 10,000): الحد الذي يمكن أن يجب أن يمر عدّاد الطريقة بالترتيب لطريقة تجميع JIT. "الجاذبية" العدّاد هو مقياس داخلي إلى بيئة التشغيل. وهي تشمل عدد الاتصالات والفروع الخلفية وغيرها مماثلة.
    • dalvik.vm.usejitprofiles (حتى نظام التشغيل Android 13): سواء كان عدم تفعيل الملفات الشخصية في JIT. ويمكن استخدام هذه السمة حتى إذا كانت السمة dalvik.vm.usejit خطأ. لاحظ أنه إذا كان ذلك خاطئًا، فسينفذ فلتر التجميع العنقودي speed-profile لا تؤدي AOT إلى تجميع أي طريقة تعادل verify. منذ على الإصدار 14 من نظام التشغيل Android، تكون الملفات الشخصية في JIT مفعّلة دائمًا ولا يمكن إيقافها.
    • dalvik.vm.jitprithreadweight (القيمة التلقائية هي dalvik.vm.jitthreshold / 20): وزن "نماذج" JIT (يُرجى الاطّلاع على jitthreshold) للاطّلاع على سلسلة محادثات واجهة مستخدم التطبيق. استخدِمها لتسريع عملية تجميع الفيديو من الطرق التي تؤثر بشكل مباشر على تجربة المستخدمين عند التفاعل مع التطبيق.
    • dalvik.vm.jittransitionweight (القيمة التلقائية هي dalvik.vm.jitthreshold / 10): أهمية الطريقة الاستدعاء الذي ينتقل بين رمز التجميع والمترجم. يساعد ذلك في تأكد من تجميع الأساليب المتضمنة لتقليل التحولات (وهي باهظ الثمن).

    خيارات Dex2oat

    تؤثر هذه الخيارات في عملية تجميع المحتوى على الجهاز فقط (تُعرف أيضًا باسم dexopt)، ويؤثر عدد قليل منها أيضًا في dexpreopt، في حين أنّ الخيارات التي تمت مناقشتها في قسم إعداد ROM للنظام أعلاه فقط التأثير على dexpreopt.

    خيارات التحكّم في استخدام الموارد:

    • dalvik.vm.image-dex2oat-threads/dalvik.vm.image-dex2oat-cpu-set (حتى Android 11): عدد السلاسل ومجموعة نوى وحدة المعالجة المركزية (CPU) أدناه) لاستخدامها مع صور التمهيد.
    • dalvik.vm.boot-dex2oat-threads/dalvik.vm.boot-dex2oat-cpu-set:
      • (حتى نظام التشغيل Android 11) عدد السلاسل ومجموعة نوى وحدة المعالجة المركزية (CPU) (انظر أدناه) لاستخدامها أثناء وقت التشغيل لكل شيء بخلاف صور التشغيل.
      • (اعتبارًا من نظام التشغيل Android 12) عدد سلاسل المحادثات ومجموعة نوى وحدة المعالجة المركزية (CPU) (انظر أدناه) لاستخدامها أثناء وقت التشغيل لكل شيء، بما في ذلك صور التمهيد.
        • وعلى وجه التحديد، يتوافق هذا مع الإصدار Android 14 فئة الأولوية PRIORITY_BOOT في خدمة ART.
    • dalvik.vm.restore-dex2oat-threads/dalvik.vm.restore-dex2oat-cpu-set:
      • (اعتبارًا من نظام التشغيل Android 11، وحتى الإصدار 13 من نظام التشغيل Android) عدد السلاسل ومجموعة نوى وحدة المعالجة المركزية (CPU) (انظر أدناه) التي يمكن استخدامها لاستعادة البيانات من السحابة الإلكترونية النسخ الاحتياطي.
      • (اعتبارًا من نظام التشغيل Android 14) عدد سلاسل المحادثات ومجموعة نوى وحدة المعالجة المركزية (CPU) (انظر أدناه) لاستخدامه مع كل شيء أكثر حساسية لوقت الاستجابة من المعتاد، بما في ذلك للاستعادة من النسخ الاحتياطي السحابي.
        • يتجاوب هذا على وجه التحديد مع فئة الأولوية PRIORITY_INTERACTIVE_FAST في خدمة ART
    • dalvik.vm.background-dex2oat-threads/ dalvik.vm.background-dex2oat-cpu-set (اعتبارًا من نظام التشغيل Android 14): عدد السلاسل ومجموعة نوى وحدة المعالجة المركزية (CPU) أدناه) لاستخدامها في الخلفية.
      • على وجه التحديد، يتجاوب هذا مع فئة الأولوية PRIORITY_BACKGROUND في خدمة ART.
    • dalvik.vm.dex2oat-threads/dalvik.vm.dex2oat-cpu-set: عدد السلاسل ومجموعة نوى وحدة المعالجة المركزية (CPU) التي يمكن استخدامها في أي أغراض أخرى.

    يجب تحديد مجموعة من نوى وحدة المعالجة المركزية (CPU) كقائمة مفصولة بفواصل من معرّفات وحدة المعالجة المركزية. على سبيل المثال لتشغيل على وحدة المعالجة المركزية (CPU) بنواة من 0 إلى 3، مع ضبط:

    dalvik.vm.dex2oat-cpu-set=0,1,2,3
    

    عند إعداد خصائص تقارب وحدة المعالجة المركزية (CPU)، ننصح بمطابقة الموقع المطابق عدد سلاسل dex2oat لتتطابق مع عدد وحدات المعالجة المركزية (CPU) التي تم اختيارها لتجنّب الذاكرة غير الضرورية ووحدات الإدخال والإخراج التنافس:

    dalvik.vm.dex2oat-cpu-set=0,1,2,3
    dalvik.vm.dex2oat-threads=4
    

    بالإضافة إلى خصائص النظام أعلاه، يمكنك أيضًا استخدام الملفات الشخصية للمهام للتحكم في لاستخدام موارد dex2oat (راجِع طبقة التجريد لدى Cgroup).

    الملفات الشخصية المتاحة للمهام هي:

    • Dex2OatBackground (اعتبارًا من نظام التشغيل Android 14) (يتم اكتساب Dex2OatBootComplete تلقائيًا): تتحكّم هذه السياسة في الموارد التي يتم استخدامها في الخلفية.
      • على وجه التحديد، يتجاوب هذا مع فئة الأولوية PRIORITY_BACKGROUND في خدمة ART.
    • Dex2OatBootComplete:
      • (حتى نظام التشغيل Android 13) تتحكّم في المورد الذي تريد استخدامه في كل شيء بعد التشغيل.
      • (اعتبارًا من نظام التشغيل Android 14) تتحكّم هذه السياسة في المورد الذي تريد استخدامه في كل العناصر. بعد التشغيل وليس في الخلفية.
        • يتجاوب هذا على وجه التحديد مع فئة الأولوية PRIORITY_INTERACTIVE_FAST وPRIORITY_INTERACTIVE في ART الخدمة.

    وعند تحديد كلٍّ من خصائص النظام والملفات الشخصية للمهام، يصبح كلاهما ساري المفعول.

    خيارات التحكّم في حجم الذاكرة:

    • dalvik.vm.image-dex2oat-Xms: حجم الذاكرة الأولية لصور التمهيد
    • dalvik.vm.image-dex2oat-Xmx: الحد الأقصى لحجم الذاكرة في صور التشغيل
    • dalvik.vm.dex2oat-Xms: الحجم الأولي لعناصر متعددة في جميع العناصر الأخرى.
    • dalvik.vm.dex2oat-Xmx: الحد الأقصى لحجم الذاكرة في كل العناصر الأخرى

    تتيح لك الخيارات التي تتحكم في الحجم الأولي والأقصى لحجم الذاكرة يجب عدم تقليل dex2oat، لأنّه قد يحدّ من التطبيقات المختلفة.

    خيارات التحكم في فلتر برنامج التجميع:

    • dalvik.vm.image-dex2oat-filter (حتى الإصدار 11 من نظام Android): عامل تصفية التجميع لصور التمهيد بدءًا من Android 12، كانت أداة التجميع يكون فلتر صور التشغيل دائمًا speed-profile ولا يمكن تغييره.
    • dalvik.vm.systemservercompilerfilter (اعتبارًا من نظام التشغيل Android 13): عامل تصفية المحول البرمجي لخادم النظام. عرض PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
    • dalvik.vm.systemuicompilerfilter (اعتبارًا من نظام التشغيل Android 13): عامل تصفية المحول البرمجي لحزمة واجهة مستخدم النظام.
    • dalvik.vm.dex2oat-filter (حتى الإصدار Android 6): عامل تصفية التجميع لكل شيء آخر.
    • pm.dexopt.<reason> (اعتبارًا من نظام التشغيل Android 7): عامل تصفية التجميع لكل شيء آخر. عرض ضبط خدمة ART لنظام التشغيل Android 14 عامًا أو أكثر، أو إعداد مدير الحزم لحساب الإصدار 13 من نظام التشغيل Android والإصدارات الأقدم

    في ما يلي خيارات أخرى للتحكّم في تجميع كل العناصر ما عدا صور التشغيل:

    • dalvik.vm.dex2oat-very-large (اعتبارًا من الإصدار 7.1 من نظام Android): الحد الأدنى لإجمالي حجم ملف dex وحدات البايت لإيقاف التحويل البرمجي AOT.
    • dalvik.vm.dex2oat-swap (بدءًا من Android 7.1) (الإعداد التلقائي: true): يسمح باستخدام التبديل لـ dex2oat. يمكن أن يساعد ذلك في تجنُّب الأعطال خارج الذاكرة. لاحظ أنه حتى إذا كان هذا الخيار فلن يستخدم dex2oat ملف التبديل إلا في حال استيفاء شروط معيّنة، مثلاً عندما يزيد رقم من ملفات dex كبيرة، وتخضع الشروط للتغيير.
    • dalvik.vm.ps-min-first-save-ms (اعتبارًا من نظام التشغيل Android 12): أدنى وقت للانتظار قبل أن ينشئ بيئة التشغيل ملفًا شخصيًا للتطبيق، في المرة الأولى أن يتم تشغيل التطبيق.
    • dalvik.vm.ps-min-save-period-ms (اعتبارًا من نظام التشغيل Android 12): الحد الأدنى من الوقت للانتظار قبل تحديث ملف تعريف التطبيق.
    • dalvik.vm.dex2oat64.enabled (اعتبارًا من نظام التشغيل Android 11) (الإعداد التلقائي: خطأ): تحديد ما إذا كنت تريد استخدام الإصدار 64 بت من dex2oat
    • dalvik.vm.bgdexopt.new-classes-percent (اعتبارًا من نظام التشغيل Android 12) (القيمة التلقائية: 20): الحد الأدنى للنسبة المئوية، بين 0 و100، للصفوف الجديدة في ملف شخصي لبدء عملية إعادة التحويل البرمجي. ينطبق فقط على التجميع الموجّه إلى الملف الشخصي (speed-profile)، ويحدث ذلك عادةً أثناء تحسين الخلفية لاحظ أن هناك أيضًا 50 صفًا جديدًا على الأقل إلى جانب حد النسبة المئوية، ولا يمكن ضبطه.
    • dalvik.vm.bgdexopt.new-methods-percent (اعتبارًا من نظام التشغيل Android 12) (القيمة التلقائية: 20): النسبة المئوية الدنيا، التي تتراوح بين 0 و100، للطرق الجديدة في ملف شخصي لبدء إعادة التحويل البرمجي. ينطبق فقط على التجميع الموجّه إلى الملف الشخصي (speed-profile)، ويحدث ذلك عادةً أثناء تحسين الخلفية لاحظ أن هناك أيضًا حد لا يقل عن 100 طريقة جديدة بالإضافة إلى إلى حد النسبة المئوية، ولا يمكن ضبطه.
    • dalvik.vm.dex2oat-max-image-block-size (اعتبارًا من نظام التشغيل Android 10) (الإعداد التلقائي: 524288) الحد الأقصى لحجم الكتلة الثابتة للصور المضغوطة تنقسم الصورة الكبيرة إلى مجموعة من العناصر الصلبة بحيث لا يزيد حجم الكتلة عن الحد الأقصى للحجم.
    • dalvik.vm.dex2oat-resolve-startup-strings (اعتبارًا من نظام التشغيل Android 10) (الإعداد التلقائي: صحيح) إذا كانت القيمة هي true، سيؤدي ذلك إلى حلّ dex2oat جميع السلاسل الثابتة التي تتم الإشارة إليها من الطرق التي تحمل علامة "شركة ناشئة" في الملف الشخصي.
    • debug.generate-debug-info (الإعداد التلقائي: false) تحديد ما إذا كان سيتم إنشاء معلومات تصحيح الأخطاء لتصحيح الأخطاء الأصلية، مثل استرداد تسلسل استدعاء الدوال البرمجية ومعلومات رموز ELF وأقسام الأقزام.
    • dalvik.vm.dex2oat-minidebuginfo (اعتبارًا من نظام التشغيل Android 9) (الإعداد التلقائي: صحيح) ما إذا كان سيتم إنشاء الحد الأدنى من معلومات تصحيح الأخطاء المضغوطة بواسطة LZMA والضرورية خطوط خلفي للطباعة.

    خيارات خدمة ART

    بدايةً من نظام التشغيل Android 14، أصبحت تقنية تجميع AOT على الجهاز (المعروفة أيضًا باسم dexopt) تتم معالجتها بواسطة خدمة ART. للحصول على معلومات حول ضبط خدمة ART، يُرجى الاطّلاع على ضبط خدمة ART:

    خيارات أداة إدارة الحِزم

    في الإصدار Android 14، أصبحت تقنية تجميع AOT على الجهاز (المعروفة أيضًا باسم dexopt). التعامل مع مدير الحزمة. لمزيد من المعلومات عن إعداد مدير الحزم لـ dexopt، يُرجى الاطّلاع على ضبط مدير الحزم.

    إعدادات A/B الخاصة

    إعدادات ROM

    بدءًا من الإصدار Android 7.0، يمكن للأجهزة استخدام قسمَي نظام لتفعيل التفعيل تحديثات نظام A/B لتوفير حجم قسم النظام، يمكن تثبيت الملفات التي تمت الموافقة عليها مسبقًا في قسم النظام الثاني غير المستخدَم. ثم يتم نسخها إلى قسم البيانات عند التشغيل لأول مرة.

    مثال على الاستخدام (في device-common.mk):

    PRODUCT_PACKAGES += \
         cppreopts.sh
    PRODUCT_PROPERTY_OVERRIDES += \
         ro.cp_system_other_odex=1
    

    وفي BoardConfig.mk بالجهاز:

    BOARD_USES_SYSTEM_OTHER_ODEX := true
    

    يُرجى ملاحظة أنّ رمز مسار التمهيد ورمز خادم النظام والأجزاء الأساسية الخاصة بالمنتج يتم تجميع التطبيقات دائمًا في قسم النظام. وبشكلٍ افتراضي، يتم تجميع التطبيقات في قسم النظام الثاني غير المستخدَم. يمكن أن تظهر فائدة هذا بوضوح أكبر يتم التحكّم فيه باستخدام SYSTEM_OTHER_ODEX_FILTER، التي لها قيمة من خلال القيمة التلقائية لـ:

    SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%
    

    ضبط الأداء في الخلفية عبر الهواء

    في الأجهزة التي تمكّن A/B، يمكن تجميع التطبيقات في الخلفية قبل إعادة التشغيل باستخدام صورة نظام جديدة. الاطّلاع على تجميع التطبيقات في خلفية لتضمين النص البرمجي للتجميع والبرامج الثنائية في صورة النظام اختياريًا. تشير رسالة الأشكال البيانية يتم التحكم في فلتر التجميع المستخدَم في هذا التجميع من خلال:

    pm.dexopt.ab-ota=speed-profile
    

    ننصحك باستخدام speed-profile للاستفادة من توجيهات الملف الشخصي التجميع وتوفير مساحة التخزين.

    خيارات JDWP

    يتم التحكّم في إنشاء سلسلة محادثات البروتوكول السلكي لتصحيح أخطاء Java (JDWP) في إصدارات userdebug من خلال خاصية نظام واحدة (persist.debug.dalvik.vm.jdwp.enabled) بشكل تلقائي، يستخدم هذا الموقع ولم يتم ضبطه، ولا يتم إنشاء سلاسل محادثات JDWP إلا للتطبيقات التي يمكن تصحيح الأخطاء فيها. لتفعيل سلاسل محادثات JDWP لكليهما التطبيقات التي لا يمكن تصحيح الأخطاء بها وتلك التي لا يمكن تصحيحها، يُرجى ضبط persist.debug.dalvik.vm.jdwp.enabled. إلى 1. يجب إعادة تشغيل الجهاز كي تدخل التغييرات على الموقع حيز التنفيذ.

    لتصحيح أخطاء تطبيق لا يمكن تصحيح الأخطاء به في إصدار userdebug، فعِّل JDWP من خلال تشغيل ما يلي :

      adb shell setprop persist.debug.dalvik.vm.jdwp.enabled 1
      adb reboot
      
    بالنسبة إلى الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android والإصدارات الأقدم، ينشئ بيئة التشغيل JDWP سلاسل محادثات للتطبيقات التي يمكن تصحيح الأخطاء بها وتلك التي لا يمكن تصحيح الأخطاء بها في إصدارات userdebug. وهذا يعني أنه من الممكن إرفاق برنامج تصحيح الأخطاء أو ملف شخصي بأي تطبيق في إصدارات userdebug.