استخدام "أداة تحليل إعدادات R8"

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

إنشاء التقرير

باستخدام الإصدار 9.3.0 من AGP والإصدارات الأحدث، يمكنك إنشاء تقرير "أداة تحليل إعدادات 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 من AGP والإصدارات الأقدم

بالنسبة إلى الإصدار 9.2 من AGP والإصدارات الأقدم، حدِّث نسختك المحلية من R8 إلى أحدث إصدار من خلال إضافتها كاعتمادية في مسار الفئات إلى ملف settings.gradle أو settings.gradle.kts الخاص بمشروعك:

pluginManagement {
    repositories {
        google()
        mavenCentral()
    }
    buildscript {
        dependencies {
            // Update to a more recent R8 version.
            classpath("com.android.tools:r8:9.4.14")
        }
    }
}

يستخدِم ذلك أحدث إصدار من R8، بما في ذلك أحدث أداة تحليل إعدادات، ويمكن إجراء ذلك مؤقتًا فقط عند تحليل إعدادات R8.

يمكنك الآن ضبط سمة النظام 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 إحصاءات عن إعدادات R8 في تطبيقك وتأثير كل قاعدة احتفاظ في تطبيقك. يساعدك ذلك في تحقيق أقصى استفادة من التحسين من R8، ما يؤدي إلى تحسين أداء تطبيقك. استخدِم النتائج التالية لفهم مقدار قاعدة الرموز البرمجية المتاحة للتحسين من خلال R8.

مثال على قسم ملخّص التقرير
الشكل 1. مثال على قسم ملخّص التقرير

نتيجة تقليص الرموز البرمجية

عندما يقلّص R8 حجم تطبيقك، فإنّه يقلّل من حجمه الإجمالي من خلال تحديد الرموز والموارد غير المستخدَمة وإزالتها، ما يضمن أن تكون عملية الإنشاء النهائية بأقل حجم ممكن. تتتبّع نتيجة تقليص الرموز البرمجية النسبة المئوية للفئات والحقول والطرق التي تخضع لتقليص الرموز البرمجية. على سبيل المثال، تعني نتيجة تقليص الرموز البرمجية البالغة% 66 أنّ R8 يمكنه إجراء تقليص الرموز البرمجية في% 66 من قاعدة الرموز البرمجية.

نتيجة التحسين

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

نتيجة الإخفاء

من خلال إخفاء الفئات والحقول والطرق بأسماء أقصر، يقلّل R8 من حجم البيانات الوصفية للتطبيق لتوفير الذاكرة. تقيس نتيجة الإخفاء النسبة المئوية للرموز البرمجية المتاحة للإخفاء ضمن قاعدة الرموز البرمجية.

تحسين قواعد الاحتفاظ

لتحسين النتائج وتحقيق تحسين أفضل باستخدام R8، عليك تحسين قواعد الاحتفاظ بحيث لا تمنع R8 من تحسين تطبيقك بدون داعٍ. يجب الاحتفاظ فقط بالفئات أو الطرق أو الحقول التي يتم الوصول إليها باستخدام الانعكاس.

لتحقيق ذلك، استخدِم تحليل قواعد الاحتفاظ.

مثال على تحليل قاعدة الاحتفاظ
الشكل 2. مثال على تحليل قواعد الاحتفاظ

للاطّلاع على التحليل التفصيلي لقاعدة، انقر عليها لفتح شاشة التفاصيل.

مثال على تحليل قاعدة الاحتفاظ
الشكل 3. مثال على تحليل قواعد الاحتفاظ

كيفية تحسين قواعد الاحتفاظ

لتحسين قواعد الاحتفاظ وتحقيق الإمكانات الكاملة لعمليات تحسين R8 في تطبيقك، اتّبِع الخطوات التالية:

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

فحص تحسين المكتبات

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

استخدِم أداة تحليل الإعدادات لفحص التأثير المجمّع لجميع قواعد الاحتفاظ المدمجة للمستهلك. من خلال تحليل تأثير كل قاعدة احتفاظ واردة من مكتبة خارجية، يمكنك تحديد المكتبات الخارجية المحدّدة التي تمنع قدرًا كبيرًا من التحسين في تطبيقك وتتبُّعها.

كيفية تحسين المكتبات

لمعالجة قواعد الاحتفاظ التي تقدّمها المكتبات الخارجية، اتّبِع الخطوات التالية:

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

القواعد المضمّنة

قد تكون هناك حالات تتداخل فيها قواعد احتفاظ متعددة، وقد تمنع إحدى القواعد تحسينًا أكبر من اللازم. إذا كان هناك قاعدتا احتفاظ في قاعدة الرموز البرمجية:

# 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.

مثال على قسم ملخّص التقرير
الشكل 4. مثال على القواعد المضمّنة في التقرير

تحسين القواعد المضمّنة

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

التحقّق من التغييرات واختبارها: أعِد تشغيل أداة تحليل الإعدادات للتأكّد من حلّ التعارض. بعد ذلك، جمِّع بنية إصدار واختبِر التغييرات للتأكّد من أنّ قاعدة الرموز البرمجية تعمل على النحو المتوقّع.

إزالة القواعد غير الضرورية

باستخدام أداة تحليل الإعدادات، يمكنك إجراء تدقيق منهجي لقاعدة الرموز البرمجية لتحديد قواعد الاحتفاظ القديمة التي تسبب فوضى في إعداداتك وإزالتها. تُبرز "أداة تحليل إعدادات R8" على وجه التحديد مصدرَين رئيسيَين للقواعد غير الضرورية:

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

يضيف كلا النوعَين من القواعد فوضى إلى إعداداتك، ما يجعل صيانتها وتصحيح الأخطاء فيها أكثر صعوبة. من خلال تحديد هذه القواعد، يمكنك تنظيف إعداداتك.