أداة R8 Configuration Analyzer هي أداة مصمَّمة لمساعدتك في الاستفادة إلى أقصى حد من مزايا أداء R8 من خلال تقديم إحصاءات تفصيلية حول جودة إعدادات تطبيقك. تتيح لك هذه الأداة تتبُّع عملية تحسين R8 وتحسينها من خلال مراقبة المقاييس الرئيسية، وتحديدًا نتائج تقليص الحجم والتحسين والإخفاء، والتي تشير إلى النسبة المئوية لقاعدة الرموز المتاحة للتحسين. من خلال تحديد قواعد الإبقاء الواسعة أو غير الضرورية، بما في ذلك تلك التي تم تقديمها بواسطة المكتبات الخارجية، يساعدك المحلّل في تحسين إعداداتك لضمان قدرة R8 على تحسين أكبر عدد ممكن من الفئات والحقول والطرق بفعالية.
إنشاء التقرير
باستخدام الإصدار 9.3.0 من "مكوّن Android الإضافي في Gradle" والإصدارات الأحدث، يمكنك إنشاء تقرير "أداة تحليل إعدادات R8" باستخدام مهمة Gradle مستقلة مخصّصة أو تلقائيًا أثناء عملية إنشاء باستخدام R8.
تشغيل مهمة Gradle المستقلة (يُنصح بها للاستخدام المحلي)
عند تكرار قواعد الإبقاء بشكل نشط، استخدِم مهمة Gradle المستقلة لتقييم تأثير التغييرات بسرعة بدون إنشاء حِزمة APK أو حِزمة تطبيق بشكل كامل:
./gradlew :app:analyzeReleaseR8Config
وبما أنّ هذه المهمة تتخطى إنشاء حِزمة APK أو حِزمة تطبيق، فإنّها توفّر حلقة ملاحظات أقصر بكثير. يتيح لك ذلك تحليل سريع لكيفية تأثير قواعد الاحتفاظ في نتائج التصغير والتحسين والتشويش، وتحسينها على الفور. يتم إنشاء تقرير HTML في app/build/reports/r8/r8-config-analyzer-release.html.
إنشاء التقارير تلقائيًا أثناء عمليات الإنشاء العادية
عند تشغيل إصدار كامل من R8 (مثل assembleRelease)، يتم إنشاء التقرير تلقائيًا في build/outputs/mapping/release/configanalyzer.html.
لإيقاف الإنشاء التلقائي للمخرجات أثناء عمليات الإنشاء العادية، اضبط سمة Gradle التالية:
android.experimental.r8.enableR8ConfigurationAnalyzer=false
بالنسبة إلى الإصدار 9.2 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" والإصدارات الأقدم
بالنسبة إلى الإصدار 9.2 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأقدم، اضبط السمة com.android.tools.r8.dumpkeepradiushtmltodirectory لنظام التشغيل عند تنفيذ مهمة Gradle مع إنشاء إصدار مفعَّل باستخدام R8.
./gradlew assembleRelease \
-Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=<output_directory>
على سبيل المثال، استخدِم الأمر التالي لإنشاء تقرير HTML في الدليل /tmp/r8analysis:
# To create the /tmp/r8analysis folder.
mkdir -p /tmp/r8analysis
# To generate the report in the /tmp/r8analysis folder.
./gradlew assembleRelease \
-Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=/tmp/r8analysis
فهم التقرير
تقدّم أداة R8 Configuration Analyzer إحصاءات حول إعدادات R8 في تطبيقك وتأثير كل قاعدة keep على تطبيقك، ما يساعدك في تحقيق أقصى قدر من التحسين من خلال R8، وبالتالي تحسين أداء تطبيقك. استخدِم النتائج التالية لمعرفة مقدار الرمز البرمجي المتاح للتحسين من خلال R8.
نتيجة تقليص الرموز البرمجية
عندما يقلّل R8 حجم تطبيقك، يقلّل الحجم الإجمالي للتطبيق من خلال تحديد الرموز والموارد غير المستخدَمة وإزالتها، ما يضمن أن تكون النسخة النهائية من تطبيقك بأقل حجم ممكن. يتتبّع مقياس التصغير النسبة المئوية للفئات والحقول والطرق التي تخضع للتصغير. على سبيل المثال، يعني معدّل تقليص يبلغ% 66 أنّه يمكن لبرنامج R8 إجراء عملية التقليص في% 66 من قاعدة الرموز البرمجية.
نتيجة التحسين
تُجري الأداة R8 عمليات تحسين، مثل تضمين التعليمات البرمجية الخاصة بالدالة في مكان استدعائها ودمج الفئات، ما يؤدي إلى تحسين بدء تشغيل تطبيقك واستخدام الذاكرة. وتتتبّع نتيجة التحسين النسبة المئوية للفئات والحقول والدوال التي تخضع لعمليات التحسين التي تجريها الأداة R8. على سبيل المثال، إذا كانت نتيجة التحسين %66، يعني ذلك أنّه لا يمكن لـ R8 إجراء التحسين إلا في% 66 من قاعدة الرموز البرمجية.
نتيجة إخفاء مفاتيح فك التشفير
من خلال إخفاء مفاتيح فك التشفير للفئات والحقول والأساليب في أسماء أقصر، يقلّل R8 من حجم البيانات الوصفية للتطبيق لتوفير الذاكرة. تقيس نتيجة التشويش النسبة المئوية للرموز البرمجية المتاحة للتشويش ضمن قاعدة الرموز البرمجية.
تحسين قواعد الاحتفاظ بالبيانات
لتحسين النتائج والاستفادة من تحسين الأداة R8 بشكل أفضل، عليك تحسين قواعد الاحتفاظ حتى لا تمنع الأداة R8 بدون داعٍ من تحسين تطبيقك، ويجب الاحتفاظ فقط بالفئات أو الطرق أو الحقول التي يتم الوصول إليها باستخدام الانعكاس.
لتحقيق ذلك، استخدِم تحليل قاعدة الاحتفاظ.
للاطّلاع على التحليل التفصيلي لإحدى القواعد، انقر عليها لفتح شاشة التفاصيل.
كيفية تحسين قواعد الاحتفاظ
لتحسين قواعد الاحتفاظ والاستفادة من الإمكانات الكاملة لعمليات التحسين التي يجريها R8 على تطبيقك، اتّبِع الخطوات التالية:
- بالنسبة إلى كل قاعدة إبقاء، اطّلِع على النسبة المئوية للفئات والحقول والطُرق التي لا يمكن لبرنامج R8 تحسينها في "أداة تحليل الإعدادات". استخدِم هذا الخيار لتحديد قواعد الإبقاء التي تمنع التحسين في عدد كبير من الفئات أو الحقول أو الطرق. يتم أيضًا إدراج خصائص التحسين التي تمنعها كل قاعدة احتفاظ.
- إذا ظهرت لك قاعدة إبقاء تمنع تحسين عدد كبير من الفئات، عليك التأكّد من الفئات والحقول والطرق التي تمنع قاعدة الإبقاء تحسينها لمعرفة ما إذا كانت هذه القاعدة تحتفظ بعناصر لا يتم استدعاؤها ديناميكيًا باستخدام الانعكاس.
- يمكنك تقليل التحسين المحظور بسبب قواعد الإبقاء من خلال استهداف الفئات أو الحقول أو الطرق الضرورية فقط عن طريق اختيار خيار الإبقاء المناسب واتّباع أفضل الممارسات.
- التحقيق في الاختبارات وتشغيلها التي تغطي الفئات والحقول والطرق المتأثرة بقاعدة الاحتفاظ وتحسين قواعد الاحتفاظ
فحص تحسين المكتبات
عند دمج مكتبات تابعة لجهات خارجية، غالبًا ما تتضمّن هذه المكتبات قواعد خاصة بها للحفاظ على المستهلكين من أجل العمل مع R8. وبما أنّ مؤلف المكتبة لا يمكنه توقّع طريقة التنفيذ المحدّدة، فإنه يكتب أحيانًا قواعد متحفّظة وواسعة النطاق تمنع التحسين في عدد أكبر من الفئات والحقول والطرق اللازمة. قد يؤدي ذلك إلى منع R8 من تحسين أجزاء من تطبيقك لا صلة لها بالتنفيذ الفعلي لوقت التشغيل للمكتبة. يمكنك استخدام أداة R8 Configuration Analyzer لتحديد المكتبات التي تتضمّن قواعد تؤثّر سلبًا في تحسين تطبيقك.
استخدِم أداة تحليل الإعدادات لفحص التأثير المجمّع لجميع قواعد الاحتفاظ بالمستهلكين التي تم دمجها. من خلال تحليل تأثير كل قاعدة إبقاء واردة من مكتبة تابعة لجهة خارجية، يمكنك تحديد وتتبُّع المكتبات المحدّدة التابعة لجهات خارجية التي تمنع إجراء قدر كبير من التحسين في تطبيقك.
كيفية تحسين المكتبات
لحلّ مشكلة قواعد الاحتفاظ التي تم تقديمها من خلال المكتبات التابعة لجهات خارجية، اتّبِع الخطوات التالية:
- إذا كانت إحدى المكتبات تتضمّن قاعدة واسعة النطاق، ننصحك بالتواصل مع المسؤول عن صيانتها وإرسال البيانات من تقريرك إليه لتوضيح كيف تؤثّر قواعده الحالية في نتائج تحسين تطبيقك. إذا كانت مكتبة خارجية، ابحث عن الأخطاء الحالية في المكتبة قبل إرسال المشاكل.
- إذا لزم الأمر، يمكنك اختبار التحسينات المحتملة من خلال فلترة القواعد من مكتبة معيّنة. يمكنك استيراد قواعد المكتبة إلى مشروعك واستبعاد القواعد العامة وإعادة تشغيل أداة تحليل الإعدادات لقياس التحسينات المحتملة في الحجم والأداء.
القواعد المضمّنة
قد تتداخل عدة قواعد إبقاء، وقد تمنع إحدى القواعد إجراء المزيد من التحسينات. إذا كانت هناك قاعدتا keep في قاعدة الرموز البرمجية.
# Prevents optimization in the entire package
# Remove this to improve optimization
-keep class com.example.package.** { *; }
# Prevents optimization to the class inside the package
-keep class com.example.package.Myclass
إنّ قاعدة الاحتفاظ الأولى التي تمنع التحسين في الحزمة بأكملها تتضمّن قاعدة الاحتفاظ الثانية التي تستهدف فئة داخل الحزمة التي تحتفظ بها قاعدة الاحتفاظ الأولى. عندما تتداخل قواعد الإبقاء، قد تحظر إحداها تحسينات أكثر من اللازم. من خلال تحسين هذه القواعد المتداخلة، يمكنك تحقيق أقصى استفادة من تحسين R8 والتخلّص من الديون الفنية. تتضمّن هذه العملية تبسيط عملية الإعداد لضمان الاحتفاظ بالرمز الأساسي فقط مع إتاحة الاستفادة الكاملة من إمكانات التحسين في R8.
تحسين القواعد الفرعية
- ابحث عن قواعد الحفاظ على الرمز البرمجي التي تتضمّن قواعد أخرى باستخدام "أداة تحليل إعدادات R8".
- حدِّد الفئات أو الحقول أو الطرق المحدّدة في قاعدة الرموز البرمجية التي تعتمد فعليًا على الانعكاس، والتي يجب الاحتفاظ بها باستخدام قواعد الاحتفاظ. سيساعدك معرفة ذلك في تحسين قواعد الاحتفاظ بالبيانات.
- باستخدام أداة تحليل الإعدادات، يمكنك مقارنة تأثير كل قاعدة تستهدف الفئات أو الحقول أو الطرق نفسها. يمكنك استخدام النسبة المئوية للتحسين التي تم منعها بواسطة كل قاعدة احتفاظ لتحديد القاعدة الأوسع والقاعدة الأضيق.
- إذا تمت كتابة قاعدة التضييق بدقة، أي مع الاحتفاظ فقط بالأعضاء أو الفئات المحدّدة التي يتم الوصول إليها بشكل انعكاسي، أزِل قاعدة الاحتفاظ الأوسع نطاقًا. يؤدي ذلك إلى إتاحة تحسينات R8 لبقية الحزمة بأمان.
- إذا كانت القاعدة الواسعة النطاق تستهدف الفئات الصحيحة، احتفظ بها واحذف القاعدة الضيقة النطاق. والقاعدة الضيقة هي مجرد فوضى غير ضرورية. احرص على تحسين القاعدة العامة لاستهداف الصفوف أو الحقول أو الطرق التي حدّدتها فقط.
التحقّق من التغييرات واختبارها: أعِد تشغيل أداة تحليل الإعدادات للتأكّد من حلّ التعارض. بعد ذلك، عليك تجميع إصدار تجريبي واختبار التغييرات للتأكّد من أنّ قاعدة الرموز البرمجية تعمل على النحو المتوقّع.
إزالة القواعد غير الضرورية
باستخدام أداة تحليل الإعدادات، يمكنك التدقيق بشكل منهجي في قاعدة الرموز البرمجية لتحديد قواعد الإبقاء القديمة التي تسبّب تشويشًا في الإعدادات وإزالتها. يُبرز "محلّل إعدادات R8" مصدرَين أساسيَّين للقواعد غير الضرورية، وهما:
- القواعد غير المستخدَمة: هي القواعد التي لا تتطابق مع أي فئات أو طرق أو حقول في الإصدار الحالي. وغالبًا ما تظل هذه الإعدادات بعد إعادة تصميم الرمز أو إزالة التبعيات أو من خلال عمليات النسخ واللصق للإعدادات التي لم تعُد ذات صلة، ما يؤدي إلى زيادة تعقيد الإعدادات بلا داعٍ.
- القواعد المتطابقة: تشير قواعد الاحتفاظ المتطابقة إلى القواعد التي تستهدف الفئات والحقول والطرق نفسها أو الإعلانات المكررة لقاعدة الاحتفاظ في الملف نفسه أو في ملفات قواعد الاحتفاظ المختلفة.
يؤدي كلا النوعين من القواعد إلى إضافة تشويش إلى عملية الإعداد، ما يصعّب عملية الصيانة وتصحيح الأخطاء. ومن خلال تحديد هذه الأخطاء، يمكنك تصحيح الإعدادات.