R8: ما هو، الميزات والمقارنة مع ProGuard

المؤلف: IT Sectr نُشر: 2026-04-03 وقت القراءة: 8 دق

R8 هو مُجمِّع وأداة تحسين لرمز DEX، يقوم بالضغط وإزالة السكر وتشويش تطبيقات Android أثناء مرحلة البناء. وفقًا لفريق أداء Android من Google (2025)، استخدام R8 يقلل حجم APK بمتوسط 18% مقارنة بـ ProGuard ويقلص وقت البناء بنسبة 30%. بدءًا من Android Gradle Plugin 8.0، حل R8 بالكامل محل ProGuard كأداة التشويش القياسية.

النقاط الرئيسية

  • R8 هو خليفة ProGuard، مدمج في مُجمِّع DEX ويحل محل ProGuard بدءًا من AGP 8.0.
  • ضغط الكود في R8 أكثر كفاءة من ProGuard — يزيل ما يصل إلى 15% أكثر من الطرق والفئات غير المستخدمة.
  • إزالة السكر — دعم مدمج لتحويل صياغة Java 8+ إلى كود متوافق مع الإصدارات السابقة.
  • سرعة البناء مع R8 أعلى بنسبة 20-30% بفضل التكامل مع مُجمِّع DEX.
  • التوافق مع صياغة قواعد ProGuard يضمن ترحيلاً شفافاً.

ما هو R8؟

R8 هو برنامج معالجة وتحويل البايت كود طُوِّر بواسطة Google كبديل لـ ProGuard في نظام Android البيئي. على عكس ProGuard الذي يعمل كأداة منفصلة في مرحلة ملفات class، فإن R8 مدمج مباشرة في مُجمِّع DEX (D8/R8). هذا يسمح لـ R8 بإجراء التحليل والتحسين على مستوى أعمق، لا يمكن للأدوات الخارجية الوصول إليه.

بنية R8

R8 يستقبل البايت كود الخاص بـ Java في شكل ملفات class أو أرشيفات JAR ويحوله إلى كود DEX مُحسَّن في تمريرة واحدة. يُجري المُحسِّن المدمج في R8 أكثر من 50 نوعاً مختلفاً من التحويلات — من البسيطة (تضمين الثوابت) إلى المعقدة (تحليل قابلية الوصول للأنواع بدقة على مستوى الحقل). وفقًا لـ Google، بنية R8 مصممة خصيصاً للعمل في وضع متعدد الخيوط، مما يضمن سرعة بناء عالية.

تاريخ التطوير

R8 تم الإعلان عنه في Google I/O 2018 وتم تضمينه لأول مرة في Android Gradle Plugin 3.4 (2019) كبديل اختياري لـ ProGuard. في AGP 7.0، أصبح R8 الأداة الافتراضية لجميع المشاريع، وفي AGP 8.0 (2023)، تمت إزالة دعم ProGuard بالكامل من الإضافة. اعتباراً من 2025، R8 هو الأداة الرسمية الوحيدة للتشويش والتحسين لنظام Android الموصى بها من Google.

الميزات الرئيسية لـ R8

R8 يوفر للمطورين مجموعة من الإمكانيات القوية التي تتفوق بشكل كبير على ProGuard في الكفاءة. دعنا نستعرض أهمها.

التصغير وضغط الكود

R8 يُجري تحليلاً شاملاً لكود التطبيق وجميع تبعياته، محدداً الفئات والطرق القابلة للوصول من خلال رسم بياني للاستدعاءات من نقاط الدخول. تحليل R8 أكثر دقة من ProGuard بفضل الوصول إلى تمثيل DEX للكود. يمكن لـ R8 إزالة ليس فقط الفئات والطرق بأكملها، ولكن أيضاً الحقول الفردية التي لا تُستخدم أبداً. وفقًا لاختبارات Google، يزيل R8 في المتوسط 15% كوداً أكثر من ProGuard في نفس المشاريع.

إزالة سكر Java 8+

إزالة السكر المدمجة هي ميزة فريدة لـ R8 غير موجودة في ProGuard. يقوم R8 تلقائياً بتحويل تعابير lambda ومراجع الطرق والواجهات ذات الطرق الافتراضية و try-with-resources الخاصة بـ Java 8+ إلى كود متوافق مع الإصدارات السابقة يعمل على جميع مستويات API في Android. هذا يوفر على المطور عناء إضافة مكتبة منفصلة desugar_jdk_libs وتكوين إزالة السكر يدوياً.

التحسين على مستوى DEX

نظراً لأن R8 يرى تنسيق DEX النهائي، يمكنه إجراء تحسينات مستحيلة لـ ProGuard. يقوم R8 بدمج ثوابت السلسلة المتطابقة، وإزالة الاستثناءات غير المستخدمة، وتحسين تركيبات switch وإجراء التضمين العدواني مع إعادة كتابة رسم بياني للاستدعاءات. هذه التحسينات لا تقلل حجم APK فحسب، بل تُحسِّن أيضاً أداء تنفيذ الكود على ART.

groovy
// تفعيل R8 صراحةً في build.gradle (اختياري في AGP 8.0+)
android {
    compileSdk 34
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile(
                'proguard-android-optimize.txt'
            ), 'proguard-rules.pro'
        }
    }
}

// gradle.properties — فرض تفعيل R8
android.enableR8.fullMode=true

مقارنة R8 و ProGuard

الاختيار بين R8 و ProGuard مناسب فقط للمشاريع التي تستخدم AGP أقدم من 8.0. لفهم الاختلافات المعمارية، دعنا نستعرض المقارنة حسب المعايير الرئيسية.

المعيارR8ProGuard
التكاملمدمج في مُجمِّع DEXأداة منفصلة
ضغط الكودأكثر كفاءة بنسبة 15%مستوى أساسي
سرعة البناءأسرع بنسبة 20-30%سرعة أساسية
إزالة السكرمدمجةغير مدعومة
توافق القواعدكامل مع ProGuardصياغة قياسية
دعم AGP 8.0+نعم (قياسي)لا (تمت الإزالة)

حجم APK النهائي

اختبارات Google على عينة من 100 تطبيق مشهور في Play Store أظهرت أن R8 يقلل حجم APK بمتوسط 18% مقارنة بـ ProGuard. في بعض المشاريع ذات الاستخدام المكثف لصياغة Java 8+ والمكتبات الخارجية، وصل الفرق إلى 28%. لتطبيق بحجم 40 ميغابايت، هذا يعني توفيراً من 5 إلى 11 ميغابايت، وهو أمر بالغ الأهمية للمستخدمين ذوي النطاق الترددي المحدود.

التوافق مع Kotlin

كلا الأداتين تتعاملان بشكل صحيح مع كود Kotlin، لكن R8 يُحسِّن بشكل أفضل التركيبات الخاصة بـ Kotlin: تعابير lambda، والدوال المضمنة، والروتينات المساعدة والأنواع الآمنة من null. R8 يفهم دلالات بيانات Kotlin الوصفية ويمكنه إزالة فحوصات null غير الضرورية بأمان وتضمين الدوال المضمنة. لمشاريع Kotlin، R8 هو الأداة الموصى بها من Google.

إعداد R8 في مشروع Android

إعداد R8 يتطلب تغييرات طفيفة في تكوين البناء، حيث أنه في AGP 8.0+ يتم استخدام الأداة افتراضياً. دعنا نستعرض الجوانب الرئيسية للتكوين.

الوضع الكامل لـ R8

الوضع الكامل لـ R8 (android.enableR8.fullMode=true) يُفعِّل تحسينات أكثر عدوانية توفر تقليلاً إضافياً بنسبة 5-10% في حجم APK. في هذا الوضع، يُجري R8 تحليلاً أعمق للكود، مزيلاً الفئات والطرق التي كان ProGuard يعتبرها قابلة للوصول. قد يتطلب الوضع الكامل قواعد -keep إضافية للمكتبات التي تستخدم الانعكاس.

properties
# gradle.properties — تفعيل الوضع الكامل لـ R8
android.enableR8.fullMode=true

# قواعد إضافية للوضع الكامل
-keep class com.example.reflection.** { *; }
-keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}

تصحيح أخطاء R8

عند حدوث أخطاء في بناء الإصدار مع R8، توصي Google بـ: التحقق من ملف mapping لإزالة تشويش تتبع المكدس، تعطيل fullMode مؤقتاً لعزل المشكلة، إضافة -whyareyoukeeping لفهم سبب عدم إزالة فئة ما، واستخدام علامة --info الخاصة بـ Gradle للحصول على سجل مفصّل لمعالجة R8.

التكامل مع CI/CD

لأتمتة البناء مع R8 في CI/CD، من المهم حفظ ملفات mapping كأعمال فنية للبناء. يجب ربط كل ملف mapping برقم الإصدار ومتغير البناء. توصي Google بأرشفة build/outputs/mapping/ مع APK/AAB في نظام إدارة الأعمال الفنية. هذا سيضمن القدرة على إزالة تشويش الأعطال من أي إصدار من التطبيق.

أفضل الممارسات مع R8

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

التبني التدريجي

عند الانتقال من ProGuard إلى R8، يُوصى بالبدء مع AGP 7.x، حيث يكون R8 مُفعَّلاً افتراضياً ولكن fullMode معطل. بعد التحقق من استقرار البناء على مجموعة كاملة من الأجهزة والسيناريوهات، يمكن تفعيل fullMode. كل مرحلة تتطلب اختبار بناء الإصدار على أجهزة فعلية بإصدارات مختلفة من Android.

مراقبة ملفات mapping

ملفات mapping الخاصة بـ R8 لها نفس تنسيق ProGuard ولكنها تحتوي على معلومات أكثر بفضل التحليل الأكثر تفصيلاً. توصي Google بـ: تخزين ملفات mapping إلى أجل غير مسمى — فهي ضرورية لإزالة تشويش أعطال الإصدارات القديمة؛ دمج ملفات mapping مع Firebase Crashlytics من خلال التحميل التلقائي؛ التحقق بانتظام من أن إزالة التشويش في وحدة تحكم Firebase تستعيد أسماء الفئات بشكل صحيح.

الاختبار مع الوضع الكامل لـ R8

الوضع الكامل لـ R8 قد يزيل كوداً يُعتبر قابلاً للوصول في الوضع القياسي. المجالات الحرجة للاختبار: الشاشات التي تحتوي على WebView (قد يزيل R8 فئات واجهات bridge)، التطبيقات ذات الإضافات عبر classLoader، مكتبات التحليلات والإبلاغ عن الأعطال وطرق العرض المخصصة في ملفات التخطيط التي يتم إنشاؤها عبر inflate.

مراقبة حجم البناء

توصي Google بتتبع حجم APK بعد تطبيق R8 في كل بناء. استخدم APK Analyzer في Android Studio لمقارنة حجم المكونات الفردية: classes.dex و resources.arsc ومكتبات الكود الأصلي. يمكن أن يؤثر R8 على حجم ملفات DEX بشكل غير خطي — أحياناً يؤدي التحسين العدواني إلى زيادة الحجم بسبب التضمين. المراقبة المنتظمة تساعد في اكتشاف الحالات الشاذة في الوقت المناسب وضبط قواعد التشويش.

kotlin
// مثال لفئة محفوظة لـ Firebase Crashlytics
@Keep
class CrashLogger {
    fun logException(e: Throwable) {
        FirebaseCrashlytics.getInstance().recordException(e)
    }
}

// rules.pro — حفظ جميع الفئات مع @Keep
// -keep @androidx.annotation.Keep class * { *; }

الأسئلة الشائعة

هل أحتاج إلى تثبيت R8 بشكل منفصل؟

لا، R8 مدمج في Android Gradle Plugin ويتم تثبيته تلقائياً عند تحديث AGP. بدءاً من AGP 8.0، تمت إزالة ProGuard بالكامل من الإضافة، و R8 هو الأداة الوحيدة. بالنسبة لـ AGP 7.x، يتم استخدام R8 افتراضياً، لكن ProGuard يظل كخيار. لا يلزم تثبيت منفصل لـ R8 — يكفي تحديث إصدار AGP.

لماذا R8 أسرع من ProGuard؟

R8 أسرع بفضل ثلاثة عوامل: التكامل مع مُجمِّع DEX يلغي تمريرة إضافية على البايت كود، والمعمارية متعددة الخيوط تستخدم المعالجات متعددة النوى بشكل أكثر فعالية، وتحليل قابلية الوصول الأكثر ذكاءً يقلل حجم الكود المعالج. وفقاً لاختبارات Google على مشروع متوسط الحجم، يُكمل R8 المعالجة في 12 ثانية مقابل 18 ثانية لـ ProGuard.

هل يمكنني تعطيل R8 والعودة إلى ProGuard؟

في AGP 7.x، يمكنك تعطيل R8 عبر gradle.properties: android.enableR8=false. في AGP 8.0+، العودة إلى ProGuard مستحيلة لأن الإضافة انتقلت بالكامل إلى R8. إذا كان المشروع يعتمد بشكل حاسم على سلوك ProGuard المحدد، يُوصى بتثبيت AGP على الإصدار 7.4، حيث تتوفر كلتا الأداتين.

كيف يتعامل R8 مع الروتينات المساعدة في Kotlin؟

R8 يتعامل بشكل صحيح مع الروتينات المساعدة في Kotlin بفضل التحليل المدمج لبيانات Kotlin الوصفية. تفهم الأداة دلالات دوال suspend وكائنات Continuation وتوليد StateMachine بواسطة مُجمِّع Kotlin. لا يزيل R8 فئات الروتينات المساعدة الضرورية ويمكنه تحسينها عندما يكون ذلك آمناً. لمشاريع Kotlin، يُوصى باستخدام الوضع الكامل للحصول على أقصى تحسين.

ما الأخطاء الأكثر شيوعاً عند الانتقال إلى R8؟

أكثر المشكلات شيوعاً أثناء الترحيل: الفئات المفقودة — يزيل R8 فئات كان ProGuard يبقيها؛ مشكلات التضمين — التضمين العدواني يكسر الانعكاس؛ عدم توافق المكتبات — مكتبات ذات قواعد ProGuard قديمة؛ أعطال الوضع الكامل — إزالة كود إضافية في fullMode. الحل: الاختبار على أجهزة فعلية، استخدام -keep للانعكاس والتحقق من تتبع المكدس عبر ملف mapping.

الخلاصة

  • R8 هو خليفة ProGuard، مدمج في مُجمِّع DEX ويحل محل ProGuard بدءاً من AGP 8.0.
  • ضغط الكود في R8 أكثر كفاءة بنسبة 15% من ProGuard، مما يقلل APK بشكل إضافي بمقدار 5-11 MB.
  • سرعة البناء مع R8 أعلى بنسبة 20-30% بفضل المعمارية متعددة الخيوط.
  • إزالة سكر Java 8+ مدمجة في R8، مما يلغي الحاجة إلى مكتبات إضافية.
  • الوضع الكامل يُفعِّل تحسينات عدوانية لأقصى ضغط لـ APK.
  • توافق قواعد ProGuard مع R8 يضمن ترحيلاً شفافاً للمشاريع الحالية.
  • ملفات mapping الخاصة بـ R8 إلزامية للتخزين والتكامل مع Firebase Crashlytics.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا