Gradle बिल्ड धीमा क्यों होता है?
Gradle Android का बिल्ड सिस्टम है जो कोड, रिसोर्सेज, और निर्भरताओं को APK/AAB में संकलित करता है। बड़े प्रोजेक्ट्स में बिल्ड समय मिनटों तक जा सकता है। मुख्य कारण: अनावश्यक टास्क एक्सीक्यूशन, अपर्याप्त हीप मेमोरी, नेटवर्क निर्भरता डाउनलोड, और खराब कॉन्फ़िगरेशन।
तेज़ बिल्ड के लिए कॉन्फ़िगरेशन
1. gradle.properties ऑप्टिमाइज़ेशन
प्रोजेक्ट रूट में gradle.properties फाइल में निम्नलिखित जोड़ें:
# Gradle Daemon सक्षम करें (डिफ़ॉल्ट: चालू) org.gradle.daemon=true # समानांतर प्रोजेक्ट बिल्ड सक्षम करें org.gradle.parallel=true # केवल आवश्यक टास्क कॉन्फ़िगर करें (कॉन्फ़िगरेशन-ऑन-डिमांड) org.gradle.configureondemand=true # JVM आर्ग्युमेंट्स - हीप साइज़ बढ़ाएं org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 # Java 8+ के लिए (Metaspace PermGen की जगह लेता है) # -XX:MaxPermSize=512m // Java 8+ में अनावश्यक # बिल्ड कैश सक्षम करें (Gradle 3.5+) org.gradle.caching=true
2. Android Studio सेटिंग्स
File → Settings → Build, Execution, Deployment → Gradle
- ✅ Offline work चेक करें - नेटवर्क कॉल से बचने के लिए (निर्भरताएं पहले से डाउनलोड होनी चाहिए)
- ✅ Gradle JDK - नवीनतम JDK (17/21) चुनें बेहतर प्रदर्शन के लिए
File → Settings → Build, Execution, Deployment → Compiler
- ✅ Build project automatically
- ✅ Compile independent modules in parallel
- ✅ Use in-process dexing (Gradle 8.0+ में डिफ़ॉल्ट)
3. build.gradle ऑप्टिमाइज़ेशन
android {
// ...
// अनावश्यक बिल्ड टाइप्स हटाएं
buildTypes {
release {
minifyEnabled true // R8/ProGuard सक्षम करें
shrinkResources true // अनउपयोगित रिसोर्स हटाएं
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
// केवल आवश्यक ABI के लिए नेटिव लाइब्रेरी
defaultConfig {
ndk {
abiFilters 'arm64-v8a', 'armeabi-v7a' // x86, x86_64 हटाएं अगर जरूरी न हो
}
}
// डायनामिक फीचर मॉड्यूल्स के लिए
// dynamicFeatures = [":feature_module"]
}
dependencies {
// implementation के बजाय api का उपयोग केवल जब जरूरी हो (कम रीकंपाइल)
implementation 'com.android.support:appcompat-v7:28.0.0'
// वर्जन कैटलॉग उपयोग करें (Gradle 7.0+)
// libs.versions.toml में वर्जन परिभाषित करें
}
4. मॉड्यूलराइज़ेशन
- कोड को फीचर मॉड्यूल्स में विभाजित करें
implementationके बजायapiकेवल जब इंटरफेस एक्सपोज़ करना हो- डायनामिक डिलीवरी के लिए Dynamic Feature Modules उपयोग करें
5. R8 / ProGuard ऑप्टिमाइज़ेशन
# proguard-rules.pro
# अनउपयोगित कोड हटाएं
-dontwarn com.google.**
-keep class com.google.android.gms.** { *; }
# Kotlin के लिए
-keep class kotlin.Metadata { *; }
-dontwarn kotlin.**
6. Gradle प्रोफाइलिंग
बिल्ड बॉटलनेक्स पहचानने के लिए:
# कमांड लाइन से ./gradlew assembleDebug --profile --offline # HTML रिपोर्ट: build/reports/profile/ में उत्पन्न होती है
7. हार्डवेयर/सिस्टम टिप्स
- SSD - HDD की तुलना में 3-5x तेज़ I/O
- RAM - न्यूनतम 16GB, अनुशंसित 32GB+
- CPU - अधिक कोर = बेहतर समानांतर निष्पादन
- एंटीवायरस अपवाद - प्रोजेक्ट फोल्डर और .gradle फोल्डर को बाहर करें
Gradle 8.0+ नई सुविधाएं
- Configuration Cache - कॉन्फ़िगरेशन चरण को कैश करता है (
org.gradle.configuration-cache=true) - Version Catalogs - केंद्रीकृत निर्भरता प्रबंधन (libs.versions.toml)
- Lazy Task Configuration - डिफ़ॉल्ट रूप से सक्षम
- Improved Incremental Compilation - केवल बदली हुई फाइलें रीकंपाइल
सामान्य गलतियाँ जिनसे बचें
- हर बिल्ड में
cleanचलाना - बड़े मोनोलिथिक मॉड्यूल रखना
- पुराने Gradle वर्जन उपयोग करना
- अनावश्यक एनोटेशन प्रोसेसर जोड़ना
- डायनामिक वर्जन (
+) उपयोग करना - कैशिंग तोड़ता है