هل واجهت "No signature of method: build_*.android()"؟ أنت لست وحدك
\nإذا سبق لك فتح Android Studio، وإجراء تغييرات على ملف build.gradle.kts، وتلقي خطأ أحمر غامض ERROR: No signature of method: build_ap86oam3dut3pxce3x49rdtma.android() — مرحبًا بك في النادي. هذه المشكلة مع Gradle هي واحدة من أكثر المشكلات شيوعًا على Stack Overflow (آلاف المشاهدات!)، وهي قادرة على إرباك حتى المطورين ذوي الخبرة.
الخبر السار: الخطأ دائمًا تقريبًا له نفس السبب ويمكن إصلاحه في دقائق. في هذه المقالة، سنقوم بتحليله باستخدام Kotlin DSL (أي build.gradle.kts)، وسنوضح سبب حدوثه، ونقدم خطة علاج خطوة بخطوة. هيا بنا!
ماذا يعني هذا الخطأ في الواقع؟
\nGradle هو نظام بناء يقرأ نصوص build.gradle (Groovy) أو build.gradle.kts (Kotlin). عندما ترى No signature of method: build_*.android()، فهذا يعني أن Gradle لا يمكنه العثور على الدالة android { ... } في سياق المشروع الجذر.
ببساطة: أنت تحاول تكوين معلمات خاصة بـ Android (compileSdk, buildTypes, defaultConfig) في نص برمجي ليس وحدة تطبيق أو مكتبة. يحدث هذا عادةً في ملف build.gradle.kts الجذر، حيث يجب أن تكون فقط إعدادات لجميع المشاريع (الإضافات، المستودعات)، وليس تكوين Android.
الموقف النموذجي (مثال باستخدام Kotlin DSL)
\nتخيل أنك تفتح ملف build.gradle.kts الجذر وتكتب شيئًا مثل:
// ❌ كود خاطئ في ملف build.gradle.kts الجذر\nandroid {\n compileSdk = 34\n defaultConfig {\n minSdk = 24\n }\n}\n\nبعد مزامنة Gradle، يظهر الخطأ المذكور. لماذا؟ لأن النص الجذر لا يعرف شيئًا عن Android — فهو مسؤول عن التكوين العام، وليس عن وحدة معينة.
\n\nإصلاح الخطأ خطوة بخطوة
\nدعنا نفهم كيفية هيكلة ملفات البناء بشكل صحيح في مشروع Kotlin. خطوتان فقط.
\n\nالخطوة 1: تحقق من الملف الذي تقوم بتحريره
\nافتح لوحة Project في Android Studio (عادةً على اليسار). ابحث عن ملفين:
\n- \n
build.gradle.kts(الجذر، موجود في جذر المشروع) \n app/build.gradle.kts(ملف وحدةapp) \n
يحدث الخطأ إذا قمت بوضع كتلة android { ... } عن طريق الخطأ في الملف الجذر. تأكد من أنك تعمل مع app/build.gradle.kts.
الخطوة 2: انقل الكود إلى الملف الصحيح (إذا لزم الأمر)
\nإذا وجدت كتلة android في ملف build.gradle.kts الجذر — قم بقصها ولصقها في app/build.gradle.kts. إليك كيف يجب أن يبدو الإصدار الصحيح لوحدة app:
// ✅ ملف app/build.gradle.kts الصحيح\nplugins {\n id("com.android.application")\n id("org.jetbrains.kotlin.android")\n}\n\nandroid {\n namespace = "com.example.myapp"\n compileSdk = 34\n\n defaultConfig {\n applicationId = "com.example.myapp"\n minSdk = 24\n targetSdk = 34\n versionCode = 1\n versionName = "1.0"\n }\n\n buildTypes {\n release {\n isMinifyEnabled = false\n proguardFiles(\n getDefaultProguardFile("proguard-android-optimize.txt"),\n "proguard-rules.pro"\n )\n }\n }\n\n compileOptions {\n sourceCompatibility = JavaVersion.VERSION_1_8\n targetCompatibility = JavaVersion.VERSION_1_8\n }\n\n kotlinOptions {\n jvmTarget = "1.8"\n }\n}\n\ndependencies {\n implementation("androidx.core:core-ktx:1.12.0")\n implementation("androidx.appcompat:appcompat:1.6.1")\n // ... باقي التبعيات\n}\n\n\nأما ملف build.gradle.kts الجذر فيجب أن يحتوي فقط على إعدادات عامة مثل الإضافات والمستودعات، وليس كتلة android.