الأحداث والبرامج

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

قراءة لمدة 5 دقائق
Ben Weiss
مهندسة علاقات المطوّرين

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

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

سنبدأ بأكثر التغييرات تأثيرًا وأقلها جهدًا لتحسين أداء تطبيقك، وهو تفعيل مُحسِّن R8 في الوضع الكامل.

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

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

بعد قراءة هذه المقالة، ننصحك بمشاهدة فيديو مقدمة أسبوع تحسين الأداء على YouTube الذي يعرض مُحسِّن R8.

كيف تحسِّن أداة R8 أداء تطبيقك؟

image.png

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

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

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

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

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

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

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

دراسة حالة: تحسينات الأداء التي حقّقها تطبيق Reddit باستخدام أداة R8

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

image.png

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

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

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

يمكنك قراءة المزيد عن هذه التحسينات على مدونتنا.

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

أثناء عملنا مع الشركاء، لاحظنا أنّ هذه التحسينات الفنية تؤثر بشكل مباشر في رضا المستخدمين ويمكن أن تنعكس في الحفاظ على المستخدمين ومعدّل الاهتمام بالتطبيق ومدة الجلسة. تأثر معدّل تكرار زيارة المستخدم، والذي يمكن قياسه باستخدام عدد المستخدمين النشطين يوميًا أو أسبوعيًا أو شهريًا، بشكل إيجابي أيضًا نتيجةً للتحسينات الفنية في الأداء. ولاحظنا ارتفاع تقييمات التطبيقات على "متجر 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 وتقليل أخطاء "التطبيق لا يستجيب" التي يلاحظها المستخدمون بنسبة% 25. 

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

دعم الأدوات

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

image.png

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

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

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

ننصحك بمشاهدة فيديو مقدمة أسبوع تحسين الأداء على YouTube الذي يعرض مُحسِّن R8.

📣 خُض تحدي الأداء

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

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

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

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

أرسِل أسئلتك لجلسة "اسأل Android" يوم الجمعة

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

تأليف:

متابعة القراءة