تحسين رمز DEX

تحسين رمز DEX هو إحدى نتائج "مؤشرات Android الحيوية" التي تساعدك في مراقبة جودة تجميع تطبيقك وحجمه وأدائه وتحسينها. يؤدي تحسين الرموز البرمجية وإخفاؤها باستخدام R8 أو أدوات بديلة (مثل أدوات التحسين المتوافقة مع ProGuard أو المعالِجات اللاحقة الثانوية لملفات DEX) إلى تقليل حجم ملفات DEX في تطبيقك وتحسين أداء وقت التشغيل وتقليل استهلاك الذاكرة.

تحتوي ملفات DEX، أو Dalvik Executable، على الرمز البرمجي المجمَّع المستخدَم لتشغيل تطبيقك. ويتضمّن ذلك عادةً رمز Java وKotlin، على عكس رمز C++‎ المجمَّع أو ملفات .so.

تُبلغ "مؤشرات Android الحيوية" عن مقاييس تحسين رمز DEX لجميع التطبيقات والألعاب، ولكنّها تفرض فقط الحدود القصوى للتطبيقات والألعاب التي تستوفي متطلبات حجم معيّنة.

رصد المشكلة

يمكن أن تنبّهك "مؤشرات Android الحيوية" في Play Console عندما لا تستوفي مستويات تحسين رمز DEX أو تصغيره أو تشويشه في تطبيقك الحد الأدنى من النسب المحدّدة.

كيفية احتساب نتائج التحسين

بالنسبة إلى التطبيقات التي تم إنشاؤها باستخدام أحدث إصدار تصحيحي من "مكوّن Android الإضافي في Gradle"‏ 8.10 أو إصدار أحدث (على سبيل المثال، 8.10.1 بدلاً من 8.10.0)، يتم سحب هذه النِسب المئوية من ملف r8.json المضمّن. احرص على استخدام أحدث إصدار تصحيحي من AGP وR8 لرقم إصدارك الثانوي حتى يتم إنشاء بيانات وصفية دقيقة.

بالنسبة إلى التطبيقات التي تم إنشاؤها باستخدام إصدارات سابقة من "مكوّن Android الإضافي لبرنامج Gradle" أو التطبيقات التي تم تحسينها باستخدام أداة بديلة لتحسين الرموز البرمجية لا تتضمّن r8.json، تقدِّر "مؤشرات Android الحيوية" نِسب الإخفاء كخادم وكيل باستخدام ملف mapping.txt (إذا كان مضمّنًا) أو أساليب DEX الإرشادية.

الحد الأدنى لإجمالي حجم ملفات DEX

على الرغم من أنّ مؤشرات Android الحيوية تحتسب مقاييس تحسين الرموز البرمجية لجميع التطبيقات، لن تتلقّى تنبيهات إلا إذا كانت حزمة تطبيقك تستوفي متطلبات إجمالي حجم DEX التالية:

  • التطبيقات: تحتوي الحزمة على رمز DEX بحجم 10 ميغابايت على الأقل، ويتم قياسه على أنّه حجم غير مضغوط
  • الألعاب: تحتوي الحزمة على 50 ميغابايت على الأقل من رموز DEX، ويتم قياسها بالحجم غير المضغوط

قياس تحسين الرموز البرمجية محليًا

لقياس حجم DEX غير المضغوط لحزمة التطبيق والحصول على نِسب التحسين والتقليص والتمويه التي تتطابق مع النتائج في مؤشرات Android الحيوية، يمكنك تشغيل android analyze:

android analyze <yourapp>.aab

حلّ المشكلة

لمعالجة انخفاض نتائج تحسين رمز DEX، راجِع الاقتراحات المستندة إلى نظام الإنشاء وأداة التحسين:

R8

لتحسين نتائج تحسين رمز DEX في R8، يُرجى الاطّلاع على الإرشادات في مقالة تحسين أداء R8، واستخدام أداة تحليل إعدادات R8 لفهم كيفية تأثير قواعد الاحتفاظ بالبيانات في نتائج التحسين والتقليص والتمويه (للحصول على تعريفات تفصيلية لهذه المقاييس، يُرجى الاطّلاع على مقالة فهم التقرير).

إذا كنت تستخدم المكوّن الإضافي لنظام Gradle المتوافق مع Android‏ (AGP)، يمكنك أيضًا استخدام مهارة محلّل R8 للحصول على إرشادات إضافية حول تحسين قواعد الاحتفاظ بالبيانات في تطبيقك. إذا كنت تستخدم Bazel، يمكنك أيضًا الوصول إلى أداة تحليل إعدادات R8. يُرجى الاطّلاع على مستندات تحسين R8 في rules_android.

أدوات التحسين غير المستندة إلى R8 وأدوات المعالجة اللاحقة لملفات DEX

إذا كان مسار الإصدار يستخدم أدوات إصدار مخصّصة أو معالجات لاحقة ثانوية لملفات DEX، فاتّبِع الخطوات التالية لتحسين تطبيقك:

  • افتح حِزمة تطبيقك في استوديو Android واعرضها في أداة تحليل ملفات APK.
  • اختَر جميع ملفات .dex.
  • يُرجى الانتباه جيدًا إلى الملفات ذات الحجم الأكبر عند تبديل زر "إزالة تشويش الأسماء" (ملاحظة: يتطلّب ذلك تحميل ملف mapping.txt). إذا لاحظت أنّ بعض هذه الملفات تظل كبيرة الحجم بعد حجبها، من المحتمل أنّها تتأثر بقواعد الاحتفاظ على مستوى الحزمة.
  • ابحث في ملف proguard-rules.pro أو configuration.txt أو ما يعادلهما في أداة التحسين التي تستخدمها إذا لم تكن تستخدم R8، وابحث عن قواعد الاحتفاظ التي تتطابق مع الحِزم التي لا يتم تشويشها. على سبيل المثال، إذا كان com.foo. حزمة كبيرة في ملفات DEX، ابحث عن قواعد الاحتفاظ بالبيانات بالتنسيق -keep com.foo.** أو -keep com.foo.bar.**.
  • يُرجى العِلم أنّ قواعد الاحتفاظ بالمستهلكين في المكتبة قد لا تكون واضحة بما يكفي لتحديدها. إذا كنت تشكّ في أنّ إحدى قواعد مستهلكي المكتبة تؤثر في عملية التحسين، يمكنك فحص المكتبة مباشرةً باستخدام android analyze <library>.aar، أو التحقّق من صحتها من خلال إضافتها إلى نموذج تطبيق مستقل باستخدام إصدار حديث من "مكوّن Android الإضافي في Gradle" وفحصها باستخدام أداة تحليل إعدادات R8.