يمكنك تحسين حِزم معيّنة باستخدام R8 مع packageScope. تم تصميم هذه الخطوة لتكون خطوة أولى اختيارية للتطبيقات التي لا تستخدم R8 بعد، ولا يُنصح بها للتطبيقات التي تستخدم R8 حاليًا.
تحديد ما إذا كان يجب استخدام packageScope
إذا كان تطبيقك يستخدم R8، لا تستخدِم packageScope لأنّه إعداد غير مثالي من حيث الأداء وحجم التطبيق. بدلاً من ذلك، يمكنك تحسين إعدادات R8 في تطبيقك باستخدام قواعد الحفاظ على التوافق المحسّنة، أو إذا كنت تستخدم وضع التوافق، يمكنك الانتقال إلى وضع R8 الكامل.
بالنسبة إلى التطبيقات التي لا تستخدم R8 بعد، ولكنها ستستخدمها، استخدِم packageScope لإدارة عملية الانتقال بشكل تدريجي. بما أنّ الرمز R8 يطبّق تحسينات فعّالة يمكنها تغيير سلوك التطبيق، فإنّ حصر نطاق هذه التحسينات على حِزم معيّنة يمكن تحسينها بأمان، مثل AndroidX وKotlin، يتيح لك تحقيق تحسينات في الأداء بأقل قدر من المخاطر. بعد أن يصبح تطبيقك مستقرًا، يمكنك توسيع نطاق عمليات التحسين هذه تدريجيًا ليشمل بقية قاعدة الرموز البرمجية والتبعيات، مع اختبار الاستقرار في كل مرحلة.
المتطلّبات الأساسية
يتطلّب استخدام R8 مع packageScope الإصدار 9.0 أو إصدارًا أحدث من المكوّن الإضافي لنظام Gradle المتوافق مع Android.
ضبط التحسين
لتفعيل التحسين باستخدام 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 { proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro") optimization { enable = true packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**") } } } }
Groovy
android { buildTypes { release { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' optimization { enable = true packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"] } } } }
اختبار التحسين
بعد تطبيق بيان packageScope أو تعديله، عليك اختبار تطبيقك بدقة للتأكّد من عدم حدوث أي أعطال أو تغييرات غير متوقّعة في السلوك.
الانتقال من تحسين حِزم محدّدة إلى تحسين تطبيقك بالكامل
لتحقيق أقصى استفادة من التحسين، عليك الانتقال تدريجيًا من استخدام packageScope إلى استخدام R8 في تطبيقك بالكامل. تتضمّن هذه العملية توسيع نطاق التحسين بشكل تدريجي:
- البدء بالمكتبات الثابتة ابدأ بتضمين المكتبات المستخدَمة على نطاق واسع والثابتة فقط والتي تتوافق مع عمليات التحسين التي يجريها R8 في القائمة
packageScope. ابدأ بمكتبتَي AndroidX وKotlinandroidx.**وkotlin.**وkotlinx.**. - إضافة الحِزم بشكل تدريجي أضِف تدريجيًا بادئات حِزم جديدة إلى
packageScope:- تقييم التبعيات راجِع مكتبات تطبيقك. تشمل الخيارات الجيدة التي يمكن إضافتها إلى القائمة
packageScopeمكتبات Google الرسمية (مثلcom.google.**) والمكتبات القوية الأخرى، مثلOkHttp(مثلokhttp3.**وokio.**). يجب إعطاء الأولوية للمكتبات التي لا تتضمّن عمليات انعكاس أو تسلسل أو استدعاءات للرموز البرمجية الأصلية (JNI). - تحديد الأولويات استنادًا إلى حجم الحزمة استخدِم أداة تحليل حِزم APK في "استوديو Android" لتحديد أكبر العوامل المساهمة في حجم تطبيقك.
1. أنشئ حِزمة AAB أو APK للإصدار مع إيقاف R8.
1. افتحه في "أداة التحليل" وافحص الملفات
dex. 1. ترتيب الحِزم حسب الحجم وتحقّق الحِزم الأكبر عائد الاستثمار الأعلى في ما يتعلّق بالتحسين. يؤدي استهداف هذه المكتبات أولاً إلى تقليل الحجم بشكل كبير في المراحل المبكرة من العملية، شرط ألا تتضمّن هذه المكتبات قواعد إبقاء واسعة النطاق. يمكنك الاطّلاع على اختيار المكتبات بعناية لمزيد من المعلومات.
- تقييم التبعيات راجِع مكتبات تطبيقك. تشمل الخيارات الجيدة التي يمكن إضافتها إلى القائمة
- التحقّق من تغييرات السلوك بعد إضافة كل بادئة حزمة جديدة، عليك إجراء اختبار شامل لرصد أي تراجعات أو سلوكيات غير متوقّعة وحلّها.
- أضِف حِزم التطبيقات في النهاية. إذا كانت حِزم تطبيقك لا تستخدم الكثير من الانعكاس، أدرِج حِزم التطبيق في
packageScopeوأضِف قواعد الاحتفاظ بشكل تدريجي حسب الحاجة. إذا كانت حِزم تطبيقك تستخدم الكثير من الانعكاس، ضمِّن الحِزم فيpackageScopeوأضِف قواعد الاحتفاظ على مستوى الحزمة للحِزم المطلوبة. كرِّر قواعد الاحتفاظ بالبيانات لتنقيحها. - الانتقال إلى استخدام R8 في تطبيقك بالكامل: بعد تضمين معظم التبعيات في تطبيقك في بيان
packageScope، وبعد أن يصبح تطبيقك مستقرًا، أزِلpackageScopeلتحسين تطبيقك بالكامل في الوضع الكامل.