لتقديم أفضل تجربة للمستخدم، عليك تحسين تطبيقك ليكون صغير الحجم وسريعًا قدر الإمكان. تعمل أداة تحسين التطبيقات، المعروفة باسم R8، على تبسيط تطبيقك من خلال إزالة الرموز والموارد غير المستخدَمة وإعادة كتابة الرموز لتحسين أداء وقت التشغيل وغير ذلك. بالنسبة إلى المستخدمين، يعني ذلك ما يلي:
- بدء تشغيل أسرع
- تحسين أداء العرض ووقت التشغيل
- عدد أقل من أخطاء ANR
لتفعيل تحسين التطبيق، اضبط isMinifyEnabled = true (لتحسين الرمز البرمجي) وisShrinkResources = true (لتحسين الموارد) في نص برمجة الإصدار على مستوى التطبيق كما هو موضّح في الرمز التالي. ننصحك بتفعيل كلا الإعدادَين دائمًا. ننصحك أيضًا بتفعيل تحسين التطبيق فقط في الإصدار النهائي من تطبيقك الذي تختبره قبل النشر، والذي يكون عادةً إصدارًا تجريبيًا، لأنّ عمليات التحسين تزيد من وقت إنشاء مشروعك ويمكن أن تصعّب عملية تصحيح الأخطاء بسبب الطريقة التي تعدّل بها الرمز البرمجي.
Kotlin
android { buildTypes { release { // Enables code-related app optimization. isMinifyEnabled = true // Enables resource shrinking. isShrinkResources = true proguardFiles( // Default file with automatically generated optimization rules. getDefaultProguardFile("proguard-android-optimize.txt"), ... ) ... } } ... }
Groovy
android { buildTypes { release { // Enables code-related app optimization. minifyEnabled true // Enables resource shrinking. shrinkResources true // Default file with automatically generated optimization rules. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') ... } } }
تحسين تقليل حجم الموارد لإنشاء تطبيقات أصغر حجمًا
يتضمّن الإصدار 8.12.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android ميزة "تصغير حجم الموارد" المحسّنة، والتي تهدف إلى دمج تحسين الموارد والرموز البرمجية لإنشاء تطبيقات أصغر حجمًا وأسرع.
قبل تحسين عملية تصغير الموارد، كانت أداة Android Asset Packaging Tool (AAPT2) تنشئ قواعد الاحتفاظ التي تتعامل مع عملية تصغير الموارد بشكل منفصل عن الرمز البرمجي، ما يؤدي غالبًا إلى الاحتفاظ برموز برمجية أو موارد لا يمكن الوصول إليها وتشير إلى بعضها البعض.
باستخدام ميزة "تصغير الموارد المحسّن"، يتم التعامل مع الموارد كجزء من رمز البرنامج، ما يؤدي إلى إنشاء الرسم البياني للمراجع. عندما لا تتم الإشارة إلى مجموعة من الرموز أو الموارد، لا تتم حمايتها بموجب قاعدة الاحتفاظ، ويمكن إزالتها.
تفعيل ميزة تقليل حجم الموارد المحسّنة
لتفعيل مسار تقليل حجم الموارد المحسّن الجديد في إصدار من "مكوّن Android الإضافي لنظام Gradle" (AGP) قبل الإصدار 9.0.0، أضِف ما يلي إلى ملف gradle.properties في مشروعك:
android.r8.optimizedResourceShrinking=true
إذا كنت تستخدم الإصدار 9.0.0 من AGP أو إصدارًا أحدث، لن تحتاج إلى ضبط
android.r8.optimizedResourceShrinking=true. يتم تطبيق تقليص الموارد المحسَّن تلقائيًا عند تفعيل isShrinkResources = true في إعدادات الإصدار.
التحقّق من إعدادات التحسين R8 وضبطها
لتمكين R8 من استخدام إمكانات التحسين الكاملة، عليك إزالة السطر التالي من ملف gradle.properties الخاص بمشروعك، إذا كان متوفّرًا:
android.enableR8.fullMode=false # Remove this line from your codebase.
يُرجى العِلم أنّ تفعيل تحسين التطبيق يجعل من الصعب فهم تتبُّع تسلسل استدعاء الدوال البرمجية، خاصةً إذا أعاد R8 تسمية أسماء الفئات أو الطرق. للحصول على تتبُّع تسلسل استدعاء الدوال البرمجية يتوافق بشكل صحيح مع رمز المصدر، اطّلِع على استرداد تتبُّع تسلسل استدعاء الدوال البرمجية الأصلي.
في حال تفعيل R8، عليك أيضًا إنشاء ملفات شخصية لبدء التشغيل لتحسين أداء بدء التشغيل.
إذا فعّلت ميزة تحسين التطبيقات وتسبّبت في حدوث أخطاء، إليك بعض الاستراتيجيات لحلّها:
- أضِف قواعد الاحتفاظ للحفاظ على بعض الرموز بدون تعديل.
- تطبيق التحسينات بشكل تدريجي:
- عدِّل الرمز البرمجي لاستخدام مكتبات أكثر ملاءمة للتحسين.
إذا كنت مهتمًا بتحسين سرعة الإنشاء، اطّلِع على ضبط طريقة تشغيل R8 للحصول على معلومات حول كيفية ضبط R8 استنادًا إلى بيئتك.
تغييرات في سلوك إصدارَي "المكوّن الإضافي لنظام Gradle المتوافق مع Android" وR8
يوضّح الجدول التالي الميزات الرئيسية التي تم طرحها في إصدارات مختلفة من المكوّن الإضافي لنظام Gradle المتوافق مع Android (AGP) ومترجم R8.
| إصدار AGP | الميزات التي تم طرحها |
|---|---|
| 9.0 |
تقليل حجم الموارد المحسَّن: مفعَّل تلقائيًا (يمكن التحكّم فيه باستخدام android.r8.optimizedResourceShrinking). يساعد تقليل حجم الموارد المحسَّن في دمج تقليل حجم الموارد مع مسار تحسين الرموز البرمجية، ما يؤدي إلى إنشاء تطبيقات أصغر حجمًا وأسرع. من خلال تحسين مراجع الرموز والموارد في الوقت نفسه، يمكن تحديد الموارد التي تتم الإشارة إليها حصريًا من الرموز غير المستخدَمة وإزالتها. ويُعدّ هذا تحسينًا كبيرًا مقارنةً بعمليات التحسين المنفصلة السابقة.ويكون ذلك مفيدًا بشكل خاص للتطبيقات التي تشارك موارد ورموزًا برمجية كبيرة في مختلف فئات الأجهزة، مع تحقيق تحسينات ملحوظة تزيد عن% 50 في حجم التطبيق. يؤدي تقليل الحجم الناتج إلى تصغير حجم عمليات التنزيل وتسريع عمليات التثبيت وتحسين تجربة المستخدم من خلال تسريع بدء التشغيل وتحسين العرض وتقليل أخطاء ANR. فلترة قواعد المكتبة: تم إيقاف إتاحة الخيارات العامة (مثل -dontobfuscate) في قواعد مستهلكي المكتبة، وستعمل التطبيقات على فلترتها. لمزيد من المعلومات، اطّلِع على إضافة خيارات عامة.عمليات التحقّق من القيم الخالية في Kotlin: يتم تحسينها تلقائيًا (يمكن التحكّم فيها باستخدام -processkotlinnullchecks). قدّم هذا الإصدار أيضًا تحسينات كبيرة في سرعة الإنشاء. لمزيد من المعلومات، يُرجى الاطّلاع على الخيارات العامة للتحسين الإضافي.تحسين حِزم معيّنة: يمكنك استخدام packageScope لتحسين حِزم معيّنة. هذه الميزة متاحة بشكل تجريبي. لمزيد من المعلومات، يُرجى الاطّلاع على تحسين الحِزم المحدّدة باستخدام packageScope.التحسين تلقائيًا: تم إيقاف دعم getDefaultProguardFile("proguard-android.txt") نهائيًا لأنّه يتضمّن -dontoptimize الذي يجب تجنُّبه. استخدِم "proguard-android-optimize.txt" بدلاً من ذلك. إذا كنت بحاجة إلى إيقاف التحسين على مستوى تطبيقك، أضِف العلامة يدويًا إلى ملف Proguard.
|
| 8.12 |
تصغير الموارد: تمت إضافة دعم أولي (غير مفعَّل تلقائيًا. فعِّل استخدام isShrinkResources). يعمل تخفيض حجم الموارد بالتزامن مع R8 لتحديد الموارد غير المستخدَمة وإزالتها بفعالية.إعادة تتبُّع Logcat: إتاحة إعادة التتبُّع التلقائي في نافذة Logcat في "استوديو Android". |
| 8.6 |
تحسين عملية إعادة التتبُّع: تتضمّن هذه العملية إعادة تتبُّع اسم الملف ورقم السطر تلقائيًا لجميع مستويات minSdk (كان يتطلّب ذلك سابقًا الإصدار 26 أو إصدارًا أحدث من minSdk في الإصدار 8.2).يساعد تحديث R8 في ضمان إمكانية قراءة تتبُّع تسلسل استدعاء الدوال البرمجية من الإصدارات التي تم تشويشها بسهولة ووضوح. يحسِّن هذا الإصدار طريقة ربط أرقام الأسطر وملفات المصدر، ما يسهّل على أدوات مثل Logcat في "استوديو Android" إعادة تتبُّع الأعطال تلقائيًا إلى رمز المصدر الأصلي. |
| من نظام التشغيل Android |
الوضع الكامل تلقائيًا: يوفّر الوضع الكامل في R8 تحسينًا أكثر فعالية. ويكون هذا الخيار مفعَّلاً تلقائيًا. يمكنك إيقاف هذه الميزة باستخدام android.enableR8.fullMode=false.
|
| 7 |
الوضع الكامل متاح: تم طرحه كميزة اختيارية باستخدام android.enableR8.fullMode=true. يطبّق الوضع الكامل تحسينات أكثر فعالية من خلال وضع افتراضات أكثر صرامة بشأن كيفية استخدام الرمز البرمجي للبحث عن الصفات والأسماء والتعليقات التوضيحية في وقت التشغيل وغيرها من الميزات الديناميكية. وعلى الرغم من أنّها تقلّل من حجم التطبيق وتحسّن الأداء، قد تتطلّب قواعد إبقاء إضافية لمنع إزالة الرمز البرمجي الضروري.
|