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

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

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

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

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

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

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

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

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

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

image.png

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

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

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

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

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

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

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

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

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

image.png

Caption: How R8 improved Reddit's app performance

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

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

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

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

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

image.png

لذا، دعونا نسمّي الأمور بمسمّياتها: إنّ تحسين الأداء بشكل متعمّد هو فضيلة.

توجيهك إلى تطبيق أكثر فعالية

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

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

لقد وسّعنا بشكل كبير إرشاداتنا حول قواعد Keep Rules، وهي الآلية الأساسية للتحكّم في أداة التحسين 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 على true. يمكنك أيضًا تمرير ملفات الإعداد التلقائية والمخصّصة في هذه الخطوة.

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 في أخطاء ANR التي لاحظها المستخدمون. 

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

دعم الأدوات

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

image.png

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

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

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

يمكنك الاطّلاع على مقدّمة حول سلسلة "أسبوع تسليط الضوء على الأداء" حول أداة تحسين R8 على YouTube.

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

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

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

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

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

يمكنك طرح أسئلتك خلال جلسة Ask Android يوم الجمعة

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

المؤلف:
متابعة القراءة