استخدام R8 لتقليل حجم تطبيقك وتحسينه وتسريعه
مرحبًا بك في اليوم الأول من سلسلة "Spotlight Week" حول أداء Android.
سنبدأ بأهم تغيير يمكنك إجراؤه لتحسين أداء تطبيقك بأقل جهد ممكن، وهو تفعيل أداة التحسين R8 في الوضع الكامل.
من المحتمل أنّك تعرف R8 كأداة لتقليل حجم تطبيقك. ويؤدي وظيفة رائعة في إزالة الرموز والموارد غير المستخدَمة، ما يؤدي إلى تقليل حجم تطبيقك. لكنّ قدرته الحقيقية، التي يتميّز بها، هي كونه محسِّنًا.
عند تفعيل الوضع الكامل والسماح بإجراء التحسينات، ينفّذ R8 تحسينات شاملة وعميقة على مستوى البرنامج بأكمله، ويعيد كتابة الرمز البرمجي ليكون أكثر كفاءة بشكل أساسي. هذا ليس مجرد تعديل بسيط.
بعد قراءة هذه المقالة، يمكنك الاطّلاع على مقدّمة حول "أسبوع تسليط الضوء على الأداء" بشأن أداة تحسين R8 على YouTube.
كيفية تحسين الأداة R8 لأداء تطبيقك
لنلقِ نظرة على أكبر الخطوات التي يتّخذها المحسِّن R8 لتحسين أداء التطبيق.
إزالة الرموز البرمجية غير المستخدَمة هي أهم خطوة لتقليل حجم التطبيق. خلال هذه المرحلة، تزيل أداة التحسين R8 الرموز غير المستخدَمة من المكتبات التي يعتمد عليها تطبيقك، بالإضافة إلى الرموز غير النشطة من قاعدة الرموز الخاصة بك.
تستبدل عملية تضمين الدالة طلب إجراء بالرمز الفعلي، ما يؤدي إلى تحسين أداء وقت التشغيل.
يتم تطبيق دمج الفئات واستراتيجيات أخرى لجعل الرمز أكثر إيجازًا. في هذه المرحلة، لا تهمّ جميع عمليات التجريد الجميلة، مثل الواجهات والتسلسلات الهرمية للفئات، ومن المحتمل أن تتم إزالتها.
يتم استخدام تصغير حجم الرموز لتغيير أسماء الفئات والحقول والطرق إلى أسماء أقصر وبلا معنى. لذا بدلاً من MyDataModel قد ينتهي بك الأمر بصف اسمه a. وهذا هو السبب الرئيسي للارتباك عند قراءة تتبُّع تسلسل استدعاء الدوال البرمجية من تطبيق تم تحسينه باستخدام R8. (يُرجى العِلم أنّنا حسّنّا هذه العملية في الإصدار 9.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android").
تؤدي تقليص الموارد إلى تقليل حجم التطبيق بشكل أكبر من خلال إزالة الموارد غير المستخدَمة، مثل ملفات XML والرسومات القابلة للرسم.
من خلال تطبيق هذه الخطوات، يحسّن المحسِّن R8 أوقات بدء تشغيل التطبيق، ويتيح عرضًا أكثر سلاسة لواجهة المستخدم، مع تقليل عدد اللقطات البطيئة والمتوقفة، ويحسّن الاستخدام العام للموارد على الجهاز.
دراسة حالة: تحسينات الأداء في Reddit باستخدام R8
كمثال على تحسينات الأداء التي يمكن أن يحقّقها R8، لنلقِ نظرة على مثال من Reddit. بعد تفعيل الأداة R8 في الوضع الكامل، شهد تطبيق Reddit على Android تحسينات كبيرة في الأداء في مجالات مختلفة.
التعليق التوضيحي: كيف حسّنت الأداة R8 أداء تطبيق Reddit؟
لاحظ الفريق سرعة بدء التشغيل على البارد بنسبة 40% وانخفاضًا في أخطاء "التطبيق لا يستجيب" (ANR) بنسبة 30% وتحسّنًا في عرض اللقطات بنسبة 25% وانخفاضًا في حجم التطبيق بنسبة 14% .
هذه التحسينات ضرورية لضمان رضا المستخدمين. يعني بدء التشغيل بشكل أسرع انتظارًا أقل ووصولاً أسرع إلى المحتوى. يؤدي انخفاض عدد أخطاء ANR إلى توفير تطبيق أكثر استقرارًا وموثوقية، ما يقلّل من إحباط المستخدمين. يؤدي عرض الإطارات بشكل أكثر سلاسة إلى إزالة إيقاف مؤقت لعرض واجهة المستخدم، ما يجعل التمرير والصور المتحركة تبدو سلسة ومتجاوبة مع مختلف الأجهزة. كان هذا التأثير الفني الإيجابي واضحًا أيضًا في آراء المستخدمين.
يمكنك الاطّلاع على مزيد من المعلومات حول التحسينات في مدوّنتنا.
الآثار الجانبية غير الفنية لاستخدام R8
خلال عملنا مع الشركاء، لاحظنا أنّ هذه التحسينات الفنية لها تأثير مباشر في رضا المستخدمين ويمكن أن تنعكس في معدّل الاحتفاظ بالمستخدمين ومعدّل الاهتمام بالتطبيق ومدة الجلسة. وقد تأثّر إيجابًا أيضًا معدّل تكرار زيارة المستخدم، والذي يمكن قياسه من خلال المستخدمين النشطين يوميًا أو أسبوعيًا أو شهريًا، وذلك بفضل التحسينات التي أُجريت على الأداء الفني. وقد لاحظنا ارتفاعًا في تقييمات التطبيقات على "متجر Play" بالتزامن مع استخدام R8. يمكن أن تساعد مشاركة هذه المعلومات مع مالكي المنتجات وكبار مسؤولي التكنولوجيا وصنّاع القرار في تسريع أداء تطبيقك.
لذا، دعونا نسمّي الأمور بمسمّياتها: إنّ تحسين الأداء بشكل متعمّد هو فضيلة.
توجيهك إلى تطبيق أكثر فعالية
لقد علمنا أنّ إرشادات المطوّرين بشأن 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 على 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+ تحسّنًا كبيرًا في أداء التطبيق.
بعد طرح إصدار جديد من التطبيق يتضمّن هذا التغيير للمستخدمين، لاحظت Disney+ أنّ بدء تشغيل التطبيق أصبح أسرع بنسبة% 30 وانخفاضًا بنسبة% 25 في أخطاء ANR التي لاحظها المستخدمون.
لا تزال العديد من التطبيقات تستخدم اليوم الملف proguard-android.txt الذي يحتوي على العلامة -dontoptimize. وهنا يأتي دور التحسينات التي أجريناها على أدواتنا.
دعم الأدوات
بدءًا من الإصدار 3 من تحديث Narwhal في "استوديو Android" الذي يحتوي على ميزات جديدة، ستظهر لك تحذير من أداة Lint عند استخدام proguard-android.txt
واعتبارًا من الإصدار 9.0 من "برنامج Google Play للمطورين"، سنوقف الدعم تمامًا لهذا الملف. هذا يعني أنّه عليك الانتقال إلى proguard-android-optimize.txt.
لقد استثمرنا أيضًا في ميزات جديدة في "استوديو Android" لتسهيل تصحيح أخطاء الرموز البرمجية المحسّنة باستخدام R8 أكثر من أي وقت مضى. بدءًا من الإصدار 9.0 من "مكوّن Android الإضافي في Gradle"، يمكنك الآن إزالة التشويش تلقائيًا من عمليات تتبُّع تسلسل استدعاء الدوال البرمجية ضِمن أداة logcat في "استوديو Android" لعمليات الإنشاء التي تتم معالجتها باستخدام R8، ما يساعدك في تحديد سطر الرمز البرمجي الدقيق الذي يتسبّب في حدوث مشكلة، حتى في التطبيق المحسَّن بالكامل. سنتناول هذا الموضوع بتفصيل أكبر في مشاركة مدوّنة الغد ضمن "أسبوع تسليط الضوء على أداء Android".
الخطوات التالية
يمكنك الاطّلاع على مقدّمة حول أداة تحسين R8 في سلسلة "أسبوع تسليط الضوء على الأداء" على YouTube.
📣 شارِك في "تحدّي الأداء"
حان الوقت للاطّلاع على المزايا بنفسك.
ننصحك بتفعيل وضع R8 الكامل لتطبيقك اليوم.
- اتّبِع أدلة المطوّرين للبدء: تفعيل ميزة تحسين التطبيق.
- تحقَّق مما إذا كنت لا تزال تستخدم
proguard-android.txtواستبدِله بـproguard-android-optimize.txt. - بعد ذلك، قِس التأثير. لا تكتفِ بالشعور بالفرق، بل تأكَّد منه. يمكنك قياس تحسُّن الأداء من خلال تعديل الرمز من نموذج تطبيق Macrobenchmark على GitHub لقياس أوقات بدء التشغيل قبل وبعد التعديل.
نحن على ثقة بأنّك ستلاحظ تحسّنًا ملحوظًا في أداء تطبيقك. استخدِم العلامة #optimizationEnabled لطرح أي أسئلة حول تفعيل الأداة R8 أو تحديد المشاكل وحلّها. نحن في الخدمة.
لا تتردد في طرح أسئلتك خلال جلسة Ask Android يوم الجمعة
استخدِم الهاشتاغ #AskAndroid لطرح أي أسئلة حول الأداء. نحن نراقب أسئلتك طوال الأسبوع وسنجيب عن عدة أسئلة في جلسة "اسأل Android" حول الأداء يوم الجمعة 21 تشرين الثاني (نوفمبر). يُرجى متابعتنا غدًا، حيث سنتعمّق أكثر في تصحيح الأخطاء وتحديد المشاكل وحلّها. في الوقت الحالي، يمكنك البدء باستخدام R8 وتسريع عملية تطوير تطبيقك.
متابعة القراءة
-
الفعاليات والبرامج
بدءًا من الإمكانات الأساسية لأداة التحسين R8 و"التحسينات المستندة إلى الملفات الشخصية"، ووصولاً إلى تحسينات الأداء باستخدام Jetpack Compose، وإلى دليل جديد حول تحسين أداء تطبيقك، قدّمنا لك الأدوات التي تحتاج إليها لإنشاء تطبيق فعّال بأقل جهد وأعلى تأثير.
Ben Weiss, Sara Hamilton • قراءة لمدة 3 دقائق
-
الفعاليات والبرامج
نحن بصدد فتح باب تقديم الطلبات للانضمام إلى برنامج Android XR Developer Catalyst، وهو مبادرة مخصّصة لتسريع عملية تطوير تطبيقات Android XR الجاهزة للإطلاق خلال العام المقبل.
قراءة لمدة دقيقة
-
الفعاليات والبرامج
جدول فعاليات مؤتمر Google I/O متوفّر الآن.
قراءة لمدة دقيقة
البقاء على اطّلاع على آخر التحديثات
يمكنك تلقّي أحدث الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.