مقدمة: هل تعطل مشروع Kotlin فجأة؟ لا داعي للذعر!
\n\nأنت تكتب كودًا بلغة Kotlin، كل شيء يعمل، وفجأة — بام! — أثناء البناء تظهر رسالة حمراء: Error:Execution failed for task ':app:compileDebugKotlin'. > Compilation error. See log for more details. إذا سبق لك العمل على تطوير تطبيقات أندرويد، فأنت تعرف هذا الشعور عندما يقرر Gradle فجأة أن اليوم ليس يومه. هذا الخطأ هو واحد من أشهر الأخطاء على Stack Overflow، واليوم سنقوم بتحليله بالكامل.
في هذا الدليل، لن نكتفي بنسخ إجابة من الإنترنت. بل سنفهم لماذا يرفض Kotlin أحيانًا التجميع، ونتعلم كيفية إصلاحه بسرعة وبدون ألم. هيا بنا!
\n\nماذا يعني هذا الخطأ في الواقع؟
\n\nدعنا نصل إلى صلب الموضوع. الرسالة Execution failed for task ':app:compileDebugKotlin'. > Compilation error تخبرنا أن مُجمّع Kotlin وجد شيئًا في الكود لا يعجبه. أكثر ما يخادع هو أن Android Studio غالبًا ما يكتب هذه الرسالة العامة، بينما يخفي السبب الحقيقي في السجلات. عبارة "See log for more details" ليست كلامًا فارغًا. في السجلات (Build Output أو Run) يجب أن تبحث عن المشكلة الحقيقية.
لكن لا تتسرع في تصفح السجلات. هناك عدة سيناريوهات نموذجية تسبب هذا الخطأ في 90% من الحالات.
\n\nالأسباب الرئيسية (قائمة للتشخيص الذاتي)
\n- \n
- عدم توافق إصدارات Kotlin وإضافة Gradle. هذا كلاسيكي. قمت بتحديث Kotlin لكنك نسيت تحديث الإضافة في ملف
build.gradle— وظهر الخطأ. \n - تعارض التعليقات التوضيحية (Annotations). Kotlin صارم جدًا مع التعليقات التوضيحية (مثل
@Nullableمقابل@NotNull). الاستخدام الخاطئ قد يعطل التجميع. \n - هدف JVM غير صحيح. إذا كنت تستخدم ميزات من إصدار جديد من Kotlin ولكن هدف JVM قديم، سيحتج المُجمّع. \n
- مشاكل في ذاكرة التخزين المؤقت (Cache). نعم، أحيانًا "ينسى" Gradle وAndroid Studio أنك أصلحت الخطأ ويستمران في عرض القديم. \n
- أخطاء نحوية في Kotlin. قوس مفقود، نوع بيانات خاطئ — كل هذا قد يسبب هذا الخطأ بالذات، رغم أن الرسالة تبدو وكأنها مشكلة عامة في البناء. \n
الخطوة 1: قراءة السجلات بشكل صحيح (المهارة الأساسية للمطور)
\n\nقبل تغيير أي شيء، افتح علامة التبويب Build في Android Studio (عادةً في الأسفل). إذا كانت فارغة، اضغط على View → Tool Windows → Build. ابحث عن الأسطر الحمراء. غالبًا ما تبدأ المعلومات الأكثر أهمية بـ e: أو error:.
مثال من سجل حقيقي:
\ne: /Users/user/Project/app/src/main/java/com/example/MainActivity.kt: (12, 5): Null can not be a value of a non-null type String\n\nأرأيت؟ المُجمّع يقول بصراحة: "في السطر 12، الحرف 5، أنت تحاول تعيين قيمة null لمتغير لا يمكن أن يكون null". الأمر بسيط. الآن أنت تعرف أين تبحث.
\n\nالخطوة 2: ثلاثة حلول الأكثر شيوعًا (مع كود)
\n\nدعنا نحلل كل حالة بأمثلة. افتح ملف build.gradle (Module: app).
الحل رقم 1: تحديث Kotlin وإضافة Gradle
\nهذا أول شيء يجب التحقق منه. تأكد من أن إصدار Kotlin في ملف build.gradle (على مستوى المشروع) يتوافق مع إصدار الإضافة.
// build.gradle (Project level)\nbuildscript {\n ext.kotlin_version = '1.9.22' // تحقق من أحدث إصدار على kotlinlang.org\n repositories {\n google()\n mavenCentral()\n }\n dependencies {\n classpath 'com.android.tools.build:gradle:8.2.2' // يجب أن يكون إصدار Gradle متوافقًا مع Kotlin\n classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"\n }\n}\n\nإذا كنت تستخدم Kotlin 1.8+، تأكد من أن إضافة Gradle ليست متأخرة أيضًا. بعد التحديث، اضغط على "Sync Now".