تفعيل ميزة "تحسين التطبيق"

لتقديم أفضل تجربة للمستخدم، عليك تحسين تطبيقك ليكون صغير الحجم وسريعًا قدر الإمكان. تعمل أداة تحسين التطبيقات، المعروفة باسم 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 (AGP) ميزة تصغير الموارد المحسّنة، والتي تهدف إلى دمج تحسين الموارد والرموز البرمجية لإنشاء تطبيقات أصغر حجمًا وأسرع.

تفعيل ميزة تقليل حجم الموارد على النحو الأمثل

لتفعيل مسار تقليل حجم الموارد المحسَّن الجديد لإصدار من المكوّن الإضافي Android Gradle قبل الإصدار 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 (كانت تتطلّب سابقًا minSdk 26 أو أعلى في الإصدار 8.2).

يساعد تحديث R8 في ضمان إمكانية قراءة تتبُّع تسلسل استدعاء الدوال البرمجية من الإصدارات التي تم تشويشها بسهولة ووضوح. يحسّن هذا الإصدار طريقة ربط أرقام الأسطر وملفات المصدر، ما يسهّل على أدوات مثل Logcat في "استوديو Android" إعادة تتبُّع الأعطال تلقائيًا إلى رمز المصدر الأصلي.
من نظام التشغيل Android الوضع الكامل تلقائيًا: يوفّر الوضع الكامل في R8 تحسينًا أكثر فعالية. ويكون هذا الخيار مفعَّلاً تلقائيًا. يمكنك إيقاف هذه الميزة باستخدام android.enableR8.fullMode=false.
7 الوضع الكامل متاح: تم طرحه كميزة اختيارية باستخدام android.enableR8.fullMode=true. يطبّق الوضع الكامل تحسينات أكثر فعالية من خلال وضع افتراضات أكثر صرامة بشأن كيفية استخدام الرمز البرمجي للبحث عن الصفوف والأنواع في وقت التشغيل والميزات الديناميكية الأخرى. وعلى الرغم من أنّها تقلّل حجم التطبيق وتحسّن الأداء، قد تتطلّب قواعد إبقاء إضافية لمنع إزالة الرمز البرمجي الضروري.