الفعاليات والبرامج

استخدام R8 لتقليص حجم تطبيقك وتحسينه وتسريع أدائه

مدّة القراءة: 5 دقائق
عرض الملف الشخصي لـ "بن وايس"
Ben Weiss مهندسة علاقات المطوّرين

استخدام أداة R8 لتقليص حجم تطبيقك وتحسينه وتسريع أدائه

مرحبًا بكم في اليوم الأول من سلسلة "Spotlight Week" حول أداء Android.

سنبدأ بالتغيير الأكثر تأثيرًا والأقل جهدًا الذي يمكنك إجراؤه لتحسين أداء تطبيقك: تفعيل أداة تحسين R8 في الوضع الكامل.

من المحتمل أنّك تعرف أداة R8 التي تُستخدم لتقليص حجم التطبيق. فهي تؤدي مهمة رائعة في إزالة الرموز والموارد غير المستخدَمة، ما يقلل من حجم تطبيقك. ولكنّ قوته الحقيقية التي يتميّز بها g-R8 هي أنّه محسِّن.

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

بعد قراءة هذه المقالة، يمكنك الاطّلاع على مقدّمة حول أداة تحسين R8 على YouTube في سلسلة Performance Spotlight Week.

كيفية تحسين أداء تطبيقك باستخدام أداة R8

image.png

لنسلّط الضوء على أهم الخطوات التي تتّخذها أداة تحسين R8 لتحسين أداء التطبيق.

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

يستبدل تضمين الطرق طلب إجراء بالرمز الفعلي، ما يحسّن أداء وقت التشغيل.

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

يتم استخدام تصغير الرمز لتغيير أسماء الفئات والحقول والطرق إلى أسماء أقصر وغير ذات معنى. لذلك، بدلاً من MyDataModel، قد ينتهي بك الأمر بصف يحمل الاسم a. وهذا هو السبب الرئيسي للارتباك عند قراءة تتبُّع تسلسل استدعاء الدوال البرمجية من تطبيق تم تحسينه باستخدام R8. (يُرجى العِلم أنّنا أدخلنا تحسينات على ذلك في الإصدار 9.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android").

تعمل ميزة تقليص الموارد على تقليل حجم التطبيق بشكل أكبر من خلال إزالة الموارد غير المستخدَمة، مثل ملفات xml والملفات القابلة للرسم.

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

دراسة حالة: تحسينات الأداء في Reddit باستخدام R8

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

image.png

الشرح: كيف حسّنت أداة R8 أداء تطبيق Reddit

لاحظ الفريق زيادة سرعة التشغيل على البارد بنسبة %40، وانخفاضًا بنسبة %30 في أخطاء "التطبيق لا يستجيب" (ANR)، وتحسُّنًا بنسبة %25 في عرض اللقطات، وانخفاضًا بنسبة %14 في حجم التطبيق.

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

يمكنك الاطّلاع على مزيد من المعلومات حول التحسينات في مدوّنتنا.

الآثار الجانبية غير الفنية لاستخدام R8

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

image.png

لذا، لنسمّي الأمور بمسمياتها: تحسين الأداء المتعمّد هو ميزة.

إرشادات لتحسين أداء تطبيقك

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

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

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

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

الاستفادة من الإمكانات الكاملة لأداة تحسين R8

يستخدم مُحسِّن R8 تلقائيًا "الوضع الكامل" منذ الإصدار 8.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. إذا تم تطوير مشروعك على مدار سنوات عديدة، فقد يتضمّن علامة قديمة لإيقافه. ابحث عن هذا السطر في ملف gradle.properties وأزِله.

android.enableR8.fullMode=false // delete this line to enable R8's full potential

تحقَّق الآن مما إذا كنت قد فعّلت R8 في ملف build.gradle.kts الخاص بتطبيقك لإصدار الإصدار. ويتم تفعيلها من خلال ضبط isMinifyEnabled وisShrinkResources على "صحيح". يمكنك أيضًا تمرير ملفات الإعداد التلقائية والمخصّصة في هذه الخطوة.

release {

   isMinifyEnabled = true

   isShrinkResources = true

   proguardFiles(

       getDefaultProguardFile("proguard-android-optimize.txt"),

       "keep-rules.pro"

   )

}

دراسة حالة: تحسينات في أداء Disney+‎

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

بعد استبدال proguard-android.txt بـ proguard-android-optimize.txt، لاحظ فريق Disney+‎ تحسينات كبيرة في أداء التطبيق.

image.png

بعد طرح إصدار جديد من التطبيق يتضمّن هذا التغيير للمستخدمين، لاحظت Disney+‎ أنّ تشغيل التطبيق أصبح أسرع بنسبة% 30، وانخفضت أخطاء ANR التي لاحظها المستخدمون بنسبة% 25. 

لا تزال العديد من التطبيقات تستخدم ملف proguard-android.txt الذي يحتوي على العلامة -dontoptimize. وهنا يأتي دور التحسينات التي نُجريها على الأدوات.

دعم الأدوات

بدءًا من الإصدار 3 من تحديث Narwhal من "استوديو Android" الذي يحتوي على ميزات جديدة، سيظهر لك تحذير من أداة Lint عند استخدام proguard-android.txt 

image.png

واعتبارًا من الإصدار 9.0 من AGP، سنوقف دعم هذا الملف نهائيًا. هذا يعني أنّه عليك نقل البيانات إلى proguard-android-optimize.txt.

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

الخطوات التالية

يمكنك الاطّلاع على مقدّمة عن أداة تحسين R8 على YouTube في سلسلة Performance Spotlight Week.

📣 شارِك في "تحدّي الأداء"

حان الوقت لتجربة المزايا بنفسك.

ندعوك إلى تفعيل الوضع الكامل لأداة R8 في تطبيقك اليوم.

  1. اتّبِع أدلة المطوّرين للبدء: تفعيل ميزة تحسين التطبيق.
  2. تحقَّق مما إذا كنت لا تزال تستخدم proguard-android.txt واستبدِله بـ proguard-android-optimize.txt.
  3. بعد ذلك، قِس التأثير. لا تكتفِ بالشعور بالفرق، بل تحقَّق منه. يمكنك قياس تحسُّن الأداء من خلال تعديل الرمز من نموذج تطبيق Macrobenchmark على GitHub لقياس أوقات بدء التشغيل قبل وبعد التعديل.

نحن واثقون من أنّك ستلاحظ تحسّنًا كبيرًا في أداء تطبيقك. يمكنك استخدام علامة التصنيف ‎ #optimizationEnabled لأي أسئلة حول تفعيل R8 أو تحديد مشاكله وحلّها. نحن في الخدمة.

جهِّز أسئلتك لجلسة Ask Android يوم الجمعة

استخدِم علامة #AskAndroid على وسائل التواصل الاجتماعي لطرح أي أسئلة حول الأداء. سنتابع أسئلتكم طوال الأسبوع وسنجيب عن بعضها في جلسة Ask Android حول الأداء يوم الجمعة 21 نوفمبر. ترقَّبوا غدًا، حيث سنتعمّق أكثر في تصحيح الأخطاء وتحديد المشاكل وحلّها. ولكن في الوقت الحالي، يمكنك البدء باستخدام R8 وتسريع عملية تطوير تطبيقك.

من كتابة:
متابعة القراءة