تحسين الحِزم المحدّدة باستخدام packageScope (تجريبي)

يمكنك تحسين حِزم معيّنة باستخدام R8 مع packageScope. تم تصميم هذه الميزة كخطوة أولى اختيارية للتطبيقات التي لا تستخدم R8 بعد، ولا يُنصح باستخدامها للتطبيقات التي تستخدم R8 حاليًا.

تحديد ما إذا كان يجب استخدام packageScope

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

يمكن للتطبيقات التي لا تستخدم R8 بعد، ولكنها بصدد اعتماد R8، استخدام packageScope لإدارة عملية الانتقال بشكل تدريجي. بما أنّ R8 يطبّق تحسينات فعّالة يمكنها تغيير سلوك التطبيق، فإنّ تحديد نطاق هذه التحسينات لحِزم معيّنة آمنة للتحسين، مثل AndroidX وKotlin، يتيح لك تحقيق مكاسب في الأداء بأقل قدر من المخاطر. بعد أن يصبح تطبيقك مستقرًا، يمكنك توسيع نطاق هذه التحسينات تدريجيًا ليشمل بقية قاعدة الرموز البرمجية والاعتماديات، مع اختبار الاستقرار في كل مرحلة.

المتطلبات الأساسية

يتطلّب استخدام R8 مع packageScope ما يلي:

  • الإصدار 9.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android أو الإصدارات الأحدث
  • R8 في الوضع الكامل، وليس في وضع التوافق

ضبط التحسين

لتفعيل التحسين باستخدام packageScope، أكمِل الخطوات التالية.

اختيار المكتبات التي تريد تحسينها

حدِّد المكتبات التي تريد تحسينها. ننصحك بالبدء بمكتبتَي AndroidX وKotlin ‏androidx.** وkotlin.** وkotlinx.** لأنّها مكتبات مستقرة تم ضبطها لتكون متوافقة مع R8.

تفعيل إمكانية استخدام R8 مع packageScope

أضِف ما يلي إلى ملف gradle.properties في مشروعك:

android.r8.gradual.support=true

إعداد حزمة التحسين

في ملف build.gradle.kts (أو build.gradle) على مستوى الوحدة، أضِف حزمة optimization إلى إعدادات الإصدار. داخل هذه الحزمة، استخدِم packageScope لسرد الحِزم المعيّنة التي تريد تحسينها. في ملف build.gradle.kts، ضَع قائمة الحِزم بين علامتَي setOf().

Kotlin

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
            }
        }
    }
}

أنيق

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
            }
        }
    }
}

اختبار التحسين

بعد تطبيق إعلان packageScope أو تعديله، اختبِر تطبيقك بدقة للتأكّد من عدم حدوث أعطال أو تغييرات غير متوقّعة في السلوك.

الانتقال من تحسين حِزم معيّنة إلى تحسين تطبيقك بالكامل

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

  1. ابدأ بالمكتبات المستقرة : ابدأ بتضمين المكتبات المستقرة والشائعة الاستخدام فقط والمتوافقة مع تحسينات R في قائمة packageScope. ابدأ بمكتبتَي AndroidX وKotlin ‏androidx.** وkotlin.** وkotlinx.**.
  2. أضِف الحِزم بشكل تدريجي : أضِف تدريجيًا بادئات حِزم جديدة إلى packageScope:
    1. قيِّم التبعيات : راجِع مكتبات تطبيقك. تشمل الحِزم التي يمكنك إضافتها إلى قائمة packageScope مكتبات Google الرسمية (مثل com.google.**) والمكتبات القوية الأخرى مثل OkHttp (مثل okhttp3.** وokio.**). أعطِ الأولوية للمكتبات التي لا تتضمّن عمليات انعكاس أو نشر على نحو متسلسِل أو استدعاءات للرموز البرمجية الأصلية (JNI) بشكل كبير.
    2. حدِّد الأولويات استنادًا إلى حجم الحزمة : استخدِم أداة تحليل حِزمة APK في Android Studio لتحديد أكبر العوامل التي تساهم في حجم تطبيقك.
      1. أنشِئ حِزمة AAB أو APK للإصدار مع إيقاف R8.
      2. افتحها في "أداة التحليل" وافحص ملفات dex.
      3. رتِّب الحِزم حسب الحجم. تحقّق الحِزم الأكبر حجمًا أعلى عائد على الاستثمار للتحسين. يمنحك استهداف هذه الحِزم أولاً أكبر انخفاض في الحجم في وقت مبكر من العملية، طالما أنّ قواعد الاحتفاظ بهذه المكتبات ليست واسعة النطاق بشكل مفرط. راجِع اختيار المكتبات بحكمة لمزيد من المعلومات.
  3. تحقَّق من التغييرات في السلوك : بعد إضافة كل بادئة حزمة جديدة، أجْرِ اختبارًا شاملاً لرصد أي حالات تراجع أو سلوكيات غير متوقّعة وحلّها.
  4. أضِف حِزم التطبيق أخيرًا : إذا كانت حِزم تطبيقك لا تستخدم الكثير من الانعكاس، أدرِج حِزم التطبيق في packageScope وأضِف قواعد الاحتفاظ بشكل تدريجي حسب الحاجة. إذا كانت حِزم تطبيقك تستخدم الكثير من الانعكاس، أدرِج الحِزم في packageScope وأضِف قواعد الاحتفاظ على مستوى الحزمة للحِزم المطلوبة. كرِّر قواعد الاحتفاظ لتحسينها.
  5. انتقِل إلى استخدام R8 في تطبيقك بالكامل : بعد تضمين معظم تبعيات تطبيقك في إعلان packageScope واستقرار تطبيقك، أزِل packageScope لتحسين تطبيقك بالكامل في الوضع الكامل.