خطأ Gradle: تعذر حذف الملف – حل لـ Kotlin

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: الألم المألوف لكل مطور Android

\n

تقوم بتشغيل Build → Clean Project في Android Studio، على أمل إعادة بناء سريعة للمشروع، ولكن بدلاً من ذلك ترى نصًا أحمر في نافذة Build:

\n
Error: Execution failed for task ':app:clean'.\n> Unable to delete file: C:\\Users\\User\\AndroidStudioProjects\\MyApp\\app\\build\\...\\some_file.dex
\n

هل هذا مألوف؟ إذا كنت تكتب بلغة Kotlin لنظام Android، فقد يظهر هذا الخطأ بتكرار مزعج، خاصة على نظام Windows. فهو لا يبطئ التطوير فحسب، بل يجعلك تبحث عن حلول "سحرية" مثل إعادة تشغيل الكمبيوتر.

\n

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

\n

سنبدأ بالأسباب، ثم ننتقل إلى الحلول - من البسيطة إلى المتقدمة.

\n\n

لماذا لا يستطيع Gradle حذف الملف؟

\n

يحدث خطأ Unable to delete file عند تنفيذ المهمة :app:clean عندما يحاول Gradle تنظيف مجلد build/، لكنه لا يستطيع حذف ملف أو أكثر. الأسباب الرئيسية:

\n
    \n
  • الملف محظور بواسطة عملية أخرى - غالبًا ما يكون برنامج مكافحة الفيروسات، أو Windows Search Indexer، أو Android Studio نفسها.
  • \n
  • المسارات الطويلة (Windows) - إذا تجاوز مسار الملف 260 حرفًا، فقد يرفض Windows حذفه.
  • \n
  • تدفقات الإدخال/الإخراج غير المغلقة - قد يبقي تطبيقك أو مكتبتك الملف مفتوحًا.
  • \n
  • تعارض مع Instant Run / Apply Changes - الإصدارات القديمة من Android Studio قد تحظر الملفات.
  • \n
\n

غالبًا ما تظهر المشكلة على نظام Windows، ولكنها قد تظهر أيضًا على macOS/Linux عند استخدام مشاركة SMB أو Docker.

\n\n

حلول سريعة (في 5 دقائق)

\n

قبل الخوض في الكود، جرب هذه الخطوات البسيطة. فهي تساعد في 80% من الحالات.

\n\n

1. أغلق Android Studio واحذف يدويًا

\n

الطريقة الأكثر موثوقية هي إغلاق IDE وحذف مجلد app/build يدويًا. إذا لم يتم حذف الملف، استخدم Unlocker (Windows) أو أمر lsof (macOS/Linux) للعثور على العملية المحظورة.

\n\n

2. استخدم الطرفية بدلاً من الواجهة الرسومية

\n

أحيانًا "تتجمد" Android Studio في مهمة clean. نفذ الأمر في الطرفية:

\n
./gradlew clean --no-daemon
\n

العلامة --no-daemon تشغل Gradle بدون عملية خلفية، مما يحل غالبًا مشكلة الحظر.

\n\n

3. قم بتعطيل Instant Run / Apply Changes

\n

في Android Studio 3.x والإصدارات الأقدم، قد يحظر Instant Run الملفات. قم بتعطيله:

\n
    \n
  • انتقل إلى File → Settings → Build, Execution, Deployment → Instant Run.
  • \n
  • قم بإلغاء تحديد Enable Instant Run.
  • \n
\n

في الإصدارات الأحدث (Arctic Fox+) تم استبدال هذا الخيار بـ Apply Changes، لكن المشكلة أقل شيوعًا.

\n\n

حلول متقدمة: الأتمتة بلغة Kotlin

\n

إذا لم تساعد الطرق السريعة، فقد حان الوقت لأتمتة العملية. سنكتب نصًا صغيرًا بلغة Kotlin، سيتم تشغيله قبل مهمة clean وإغلاق العمليات المحظورة قسرًا.

\n\n

4. استخدام Kotlin DSL في Gradle لمهمة مخصصة

\n

أضف إلى ملف build.gradle.kts (على مستوى الوحدة) الكود التالي:

\n
// build.gradle.kts (app level)\ntasks.register<Exec>("killFileLocks") {\n    description = "يغلق العمليات التي تحظر الملفات في مجلد build"\n    commandLine("cmd", "/c", "taskkill /f /im java.exe 2>nul || exit 0")\n    // لنظام macOS/Linux استبدل بـ:\n    // commandLine("sh", "-c", "lsof -ti:8080 | xargs kill -9 2>/dev/null || true")\n}\n\ntasks.named("clean") {\n    dependsOn                

المدونات

توصيات الكتب