تحسين رمز DEX

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

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

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

الكشف عن المشكلة

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

مراقبة حالة التحسين

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

بالنسبة إلى التطبيقات التي تم إنشاؤها باستخدام أحدث حزمة تصحيح للإصدار 8.10 أو الإصدارات الأحدث من "مكوّن Android الإضافي في Gradle"، يتم استخراج هذه النسب المئوية من ملف r8.json المُضمَّن.

في الإصدارات الأقدم من "مكوّن Android الإضافي في Gradle" أو في حال عدم تضمين الملف r8.json، يتم احتساب النسب المئوية من الملف mapping.txt إذا كان مضمّنًا، أو باستخدام إحصاءات DEX إذا لم يكن ملف الربط متاحًا.

بالنسبة إلى التطبيقات التي تم تحسينها باستخدام أداة تحسين بديلة للرموز البرمجية، تجري "مؤشرات Android الحيوية" تحليلاً لتقدير النسبة المئوية للفئات والطرق والحقول التي تم تشويشها في حِزمة التطبيق.

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

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

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

تعرض "مؤشرات Android الحيوية" حجم DEX لتطبيقك، ولكن يمكنك أيضًا قياس هذا الحجم محليًا باستخدام سطر الأوامر:

  unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

قياس تحسين الرموز البرمجية باستخدام R8 على الجهاز

إذا كان تطبيقك يحسّن الأداء باستخدام R8، يمكنك قياس مستوى التحسين والتشويش وتقليل الحجم في حِزم تطبيقك باستخدام أداة تحليل إعدادات R8. يتضمّن تقرير أداة تحليل إعدادات R8 أيضًا مهارة تحليل R8. على الرغم من أنّ التقرير يمكن أن يساعدك في فهم كيفية تأثير قواعد الاحتفاظ في نتائج التحسين والتصغير والتشويش، لن تتطابق النسب المئوية في التقرير مع القيم في "مؤشرات Android الحيوية"، لأنّ هذه النسب المئوية يتم احتسابها قبل إجراء عمليات التحسين.

لفحص البيانات الوصفية الدقيقة التي تستخدمها "مؤشرات Android الحيوية" لاحتساب نتائجك، استخرِج الملف r8.json من حِزمة تطبيقك باتّباع الخطوات التالية:

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json

حلّ المشكلة

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

المكوّن الإضافي لنظام Gradle المتوافق مع Android وR8

لتحسين نتائج تحسين رموز DEX باستخدام R8، اطّلِع على الإرشادات في تحسين الأداة R8. يمكنك أيضًا استخدام مهارة "محلّل R8" للحصول على إرشادات إضافية حول تحسين قواعد الاحتفاظ بالبيانات في تطبيقك.

أنظمة الإصدار غير R8 ومعالجات DEX اللاحقة

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

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