क्या आपने "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\nGradle सिंक्रोनाइज़ेशन के बाद वही त्रुटि दिखाई देती है। क्यों? क्योंकि रूट स्क्रिप्ट Android के बारे में नहीं जानती — यह सामान्य कॉन्फ़िगरेशन के लिए जिम्मेदार है, न कि किसी विशिष्ट मॉड्यूल के लिए।
\n\nत्रुटि को ठीक करने के चरण
\nआइए समझते हैं कि Kotlin प्रोजेक्ट में बिल्ड फ़ाइलों को सही तरीके से कैसे संरचित किया जाए। कुल दो चरण हैं।
\n\nचरण 1: जाँचें कि आप कौन सी फ़ाइल संपादित कर रहे हैं
\nAndroid Studio में Project पैनल खोलें (आमतौर पर बाईं ओर)। दो फ़ाइलें खोजें:
\n- \n
build.gradle.kts(रूट, प्रोजेक्ट के रूट में स्थित) \n app/build.gradle.kts(मॉड्यूलappकी फ़ाइल) \n
त्रुटि तब होती है जब आप गलती से android { ... } ब्लॉक को रूट फ़ाइल में रख देते हैं। सुनिश्चित करें कि आप app/build.gradle.kts के साथ काम कर रहे हैं।
चरण 2: कोड को सही फ़ाइल में ले जाएँ (यदि आवश्यक हो)
\nयदि आपको रूट build.gradle.kts में android ब्लॉक मिलता है — तो उसे काटकर 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.gra