Build Config में बिल्ड पैरामीटर शामिल हैं: बिल्ड प्रकार, कंपाइलेशन फ़्लैग, साइनिंग कुंजियाँ और SDK संस्करण जो यह निर्धारित करते हैं कि विभिन्न वातावरणों के लिए एप्लिकेशन कैसे बनाया जाता है। Android Developers Guide (2026) के अनुसार, Gradle बिल्ड सिस्टम लचीले कॉन्फ़िगरेशन के लिए Product Flavors और Build Types का समर्थन करता है। Build Config मैन्युअल कोड परिवर्तन के बिना debug और release के बीच स्विच करने को स्वचालित करता है।
मुख्य बातें
Build Config सेटिंग्स का एक समूह है जो मोबाइल एप्लिकेशन के कंपाइलेशन, बिल्ड और पैकेजिंग प्रक्रिया को परिभाषित करता है। बिल्ड कॉन्फ़िगरेशन में लक्ष्य प्लेटफ़ॉर्म का चयन, न्यूनतम SDK संस्करण, ऑप्टिमाइज़ेशन फ़्लैग, साइनिंग कुंजियाँ और पर्यावरण चर शामिल हैं।
आधुनिक मोबाइल प्रोजेक्ट्स में शायद ही कभी एक ही बिल्ड कॉन्फ़िगरेशन होता है। आमतौर पर उनके पास कई होते हैं: debug (डिबगिंग के साथ डेवलपमेंट के लिए), release (ऑप्टिमाइज़ेशन के साथ प्रोडक्शन के लिए), staging (वास्तविक डेटा के साथ परीक्षण के लिए) और विभिन्न फ्लेवर (डेमो, पूर्ण, उद्यम संस्करण)।
Gradle Build Tool Survey (2025) के अनुसार, औसत Android प्रोजेक्ट 3.2 विभिन्न बिल्ड कॉन्फ़िगरेशन का उपयोग करता है, जबकि iOS प्रोजेक्ट 2.8 का उपयोग करता है। प्रत्येक कॉन्फ़िगरेशन के अपने कंपाइलेशन फ़्लैग, साइनिंग सर्टिफिकेट और सर्वर URL हो सकते हैं।
Build Config का मुख्य कार्य इन कॉन्फ़िगरेशनों के बीच स्विच करने को स्वचालित करना है। सर्वर URL या डिबग फ़्लैग को मैन्युअल रूप से बदलने के बजाय, डेवलपर IDE में वांछित Build Variant चुनता है, और बिल्ड सिस्टम संबंधित पैरामीटर को प्रतिस्थापित करता है।
Build Config का उचित सेटअप एप्लिकेशन सुरक्षा को गंभीर रूप से प्रभावित करता है: debug बिल्ड में विस्तृत लॉग, DB इंस्पेक्टर और डिबगिंग एंडपॉइंट शामिल होते हैं जिन्हें release बाइनरी से भौतिक रूप से बाहर रखा जाना चाहिए। Gradle इसे Build Types के माध्यम से हल करता है: debug में debuggable true फ़्लैग हो सकता है, release में — ProGuard के साथ minifyEnabled true। iOS Swift Active Compilation Conditions के माध्यम से समान प्राप्त करता है, जहाँ #if DEBUG के अंदर का कोड release कॉन्फ़िगरेशन में कंपाइल नहीं होता है।
Android दो मुख्य अवधारणाओं के साथ Gradle बिल्ड सिस्टम का उपयोग करता है: Build Types और Product Flavors। उनका संयोजन Build Variants बनाता है — प्रत्येक वेरिएंट का अपना पूर्ण बिल्ड कॉन्फ़िगरेशन होता है।
Build Type एक कॉन्फ़िगरेशन है जो परिभाषित करता है कि एप्लिकेशन कैसे बनाया जाता है। डिफ़ॉल्ट रूप से, Gradle दो प्रकार बनाता है: debug (डिबगिंग के साथ, बिना अस्पष्टीकरण के) और release (ProGuard/R8 के साथ, प्रकाशन के लिए हस्ताक्षरित)। डेवलपर अपने स्वयं के प्रकार जोड़ सकता है: staging, benchmark, qa।
// build.gradle.kts
android {
buildTypes {
debug {
isDebuggable = true
buildConfigField("String", "API_URL", "\"http://dev.api.com\"")
}
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
buildConfigField("String", "API_URL", "\"https://prod.api.com\"")
}
}
}
Product Flavors एक ही कोडबेस से एक ही एप्लिकेशन के विभिन्न संस्करण बनाने की अनुमति देते हैं। उदाहरण के लिए: विज्ञापनों के साथ मुफ्त संस्करण, विज्ञापनों के बिना भुगतान संस्करण और अतिरिक्त सुविधाओं के साथ उद्यम संस्करण। प्रत्येक फ्लेवर का अपना applicationId, संसाधन और SDK निर्भरताएँ हो सकती हैं।
android {
productFlavors {
register("demo") {
applicationId = "com.example.app.demo"
versionNameSuffix = "-demo"
}
register("full") {
applicationId = "com.example.app"
versionNameSuffix = ""
}
}
}
प्रत्येक Build Variant के लिए, Gradle कॉन्फ़िगरेशन फ़ील्ड के साथ एक BuildConfig क्लास उत्पन्न करता है। डेवलपर buildConfigField के माध्यम से कस्टम फ़ील्ड जोड़ता है, जबकि मानक फ़ील्ड (DEBUG, APPLICATION_ID, BUILD_TYPE, VERSION_CODE, FLAVOR) स्वचालित रूप से बनाए जाते हैं।
// कोड में BuildConfig का उपयोग
class NetworkModule {
fun createApiClient(): ApiClient {
return if (BuildConfig.DEBUG) {
ApiClient(
baseUrl = BuildConfig.API_URL,
interceptor = HttpLoggingInterceptor()
)
} else {
ApiClient(baseUrl = BuildConfig.API_URL)
}
}
}
BuildConfig बिल्ड समय पर कार्यक्षमता को सक्षम या अक्षम करने की भी अनुमति देता है। उदाहरण के लिए, आप FEATURE_CHAT_ENABLED फ़ील्ड जोड़ सकते हैं और चैट को केवल एप्लिकेशन के पूर्ण संस्करण में सक्षम कर सकते हैं, बिना रनटाइम जाँच और कोड में सशर्त ऑपरेटरों के।
नेटवर्क अनुरोधों को डिबग करने के लिए, DEBUG फ़ील्ड के साथ BuildConfig केवल debug बिल्ड के लिए OkHttp में HttpLoggingInterceptor को स्वचालित रूप से संलग्न करने की अनुमति देता है। यह गारंटी देता है कि प्रोडक्शन में कोई HTTP अनुरोध लॉग नहीं किया जाएगा, भले ही डेवलपर गलती से रिलीज़ बनाने से पहले लॉगिंग हटाना भूल जाए।
iOS इकोसिस्टम में, Build Config को Xcode Build Settings के माध्यम से प्रबंधित किया जाता है — मापदंडों की एक तालिका जहाँ प्रत्येक पैरामीटर के विभिन्न कॉन्फ़िगरेशन (Debug, Release, Staging) के लिए अलग-अलग मान हो सकते हैं।
डिफ़ॉल्ट रूप से, Xcode दो कॉन्फ़िगरेशन बनाता है: Debug (डेवलपमेंट के लिए, बिना ऑप्टिमाइज़ेशन के) और Release (प्रोडक्शन के लिए, -Os ऑप्टिमाइज़ेशन के साथ)। डेवलपर Project > Info > Configurations मेनू के माध्यम से अपने स्वयं के कॉन्फ़िगरेशन जोड़ सकता है।
प्रत्येक कॉन्फ़िगरेशन के लिए, Build Settings कॉन्फ़िगर किए जाते हैं: कंपाइलर फ़्लैग (OTHER_SWIFT_FLAGS, GCC_PREPROCESSOR_DEFINITIONS), कोड साइनिंग (CODE_SIGN_IDENTITY), प्रोविज़निंग प्रोफ़ाइल और एंटाइटलमेंट। Xcode इन सेटिंग्स को project.pbxproj फ़ाइल में लिखता है।
Build Settings के सुविधाजनक प्रबंधन के लिए, iOS डेवलपर .xcconfig फ़ाइलों का उपयोग करते हैं — KEY = VALUE प्रारूप में मापदंडों वाली टेक्स्ट फ़ाइलें। ये Xcode के लिए .env के अनुरूप हैं: मान प्रोजेक्ट से जुड़ते हैं और project.pbxproj में सेटिंग्स को ओवरराइड करते हैं।
// Debug.xcconfig
BUNDLE_ID_SUFFIX = .debug
API_BASE_URL = http://localhost:8080
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG
CODE_SIGN_IDENTITY = Apple Development
// Release.xcconfig
BUNDLE_ID_SUFFIX =
API_BASE_URL = https://api.production.com
SWIFT_ACTIVE_COMPILATION_CONDITIONS =
CODE_SIGN_IDENTITY = Apple Distribution
Build Config के कुछ पैरामीटर Info.plist — iOS एप्लिकेशन मेनिफ़ेस्ट फ़ाइल में जाते हैं। Info.plist के माध्यम से URL स्कीम, अनुमतियाँ (कैमरा, माइक्रोफ़ोन), बैकग्राउंड मोड और तृतीय-पक्ष सेवा लॉगिन कॉन्फ़िगरेशन सेट किए जाते हैं।
xcconfig के मानों को $(VARIABLE_NAME) सिंटैक्स के माध्यम से Info.plist में प्रतिस्थापित किया जा सकता है। उदाहरण के लिए, $(API_BASE_URL) Info.plist में सक्रिय बिल्ड कॉन्फ़िगरेशन के अनुसार विस्तारित होगा। यह सभी Apple प्लेटफ़ॉर्म के लिए पर्यावरण मापदंडों के प्रबंधन को केंद्रीकृत करता है।
आधुनिक प्रोजेक्ट्स में, Build Config सतत एकीकरण प्रणालियों के साथ एकीकृत होता है: GitLab CI, GitHub Actions, Bitrise, CircleCI। प्रत्येक पाइपलाइन CI/CD सिस्टम के पर्यावरण चर के माध्यम से Build Config मापदंडों को ओवरराइड कर सकती है।
Android के लिए, CI पाइपलाइन निर्दिष्ट Build Variant के साथ Gradle चलाती है: ./gradlew assembleFullRelease. साइनिंग पैरामीटर CI चर के माध्यम से पारित किए जाते हैं: STORE_PASSWORD, KEY_ALIAS. Gradle उन्हें रनटाइम पर्यावरण से पढ़ता है और build.gradle.kts में प्रतिस्थापित करता है।
// build.gradle.kts — CI चरों से पढ़ना
android {
signingConfigs {
register("release") {
storeFile = file(System.getenv("KEYSTORE_PATH") ?: "debug.keystore")
storePassword = System.getenv("STORE_PASSWORD") ?: ""
keyAlias = System.getenv("KEY_ALIAS") ?: "key"
keyPassword = System.getenv("KEY_PASSWORD") ?: ""
}
}
}
iOS के लिए, CI कॉन्फ़िगरेशन फ़्लैग के साथ xcodebuild का उपयोग करता है: -configuration Release. साइनिंग सर्टिफिकेट CI secrets के माध्यम से दिए जाते हैं, और प्रोफ़ाइल Apple Developer Portal API या Fastlane match के माध्यम से।
Fastlane उपकरण Build Config प्रबंधन को स्वचालित करता है: xcconfig उत्पन्न करता है, Info.plist में संस्करण अपडेट करता है, निर्मित IPA पर हस्ताक्षर करता है और उन्हें App Store Connect पर अपलोड करता है। Fastlane gym (बिल्ड) और match (साइनिंग) iOS CI पाइपलाइनों का मानक हैं।
Bitrise Build Report (2025) के अनुसार, CI में Build Config सेटअप वाले प्रोजेक्ट मैन्युअल बिल्ड कॉन्फ़िगरेशन समय को 73% तक कम करते हैं और साइनिंग त्रुटियों को 89% तक कम करते हैं। स्वचालित Build Config उत्पादन-तैयार पाइपलाइन का एक अनिवार्य तत्व है।
एक और महत्वपूर्ण पहलू Build Config के माध्यम से संस्करण पैरामीटरकरण है। Gradle CI चर से versionCode और versionName पढ़ने और उन्हें build.gradle.kts में गतिशील रूप से प्रतिस्थापित करने की अनुमति देता है, जिससे डेवलपर्स के बीच संस्करण असंयोजन समाप्त हो जाता है। iOS में, agvtool (Apple Generic Versioning Tool) के माध्यम से एक समान कार्य हल किया जाता है, जो git टैग या CI में बिल्ड नंबर के आधार पर बिल्ड संख्या बढ़ा सकता है।
अक्सर पूछे जाने वाले प्रश्न
Build Type (debug, release) परिभाषित करता है कैसे एप्लिकेशन बनाया जाता है: डिबगिंग के साथ या बिना, ऑप्टिमाइज़ेशन के साथ या बिना। Product Flavor (डेमो, पूर्ण) परिभाषित करता है कौन सा संस्करण बनाया जाता है: अलग applicationId, SDK, संसाधन। उनके संयोजन को Build Variant कहा जाता है।
build.gradle.kts में buildConfigField विधि के माध्यम से। फ़ील्ड स्वचालित रूप से उत्पन्न BuildConfig क्लास में जोड़ा जाता है और कोड में BuildConfig.फ़ील्ड_नाम के रूप में उपलब्ध होता है। स्ट्रिंग के लिए, मान को एस्केप किए गए उद्धरणों में लपेटा जाना चाहिए।
.xcconfig फ़ाइलों के माध्यम से — प्रत्येक वातावरण के लिए एक। Project > Info > Configurations में Debug/Staging/Release कॉन्फ़िगरेशन जोड़े जाते हैं, प्रत्येक अपने स्वयं के xcconfig को संदर्भित करता है। मान $(VAR_NAME) सिंटैक्स का उपयोग करके Info.plist में प्रतिस्थापित किए जाते हैं।
BuildConfig बिल्ड कॉन्फ़िगरेशन को एप्लिकेशन लॉजिक से अलग करता है। कोड में फ़्लैग को वातावरण बदलने पर मैन्युअल परिवर्तन और पुनर्संकलन की आवश्यकता होती है। BuildConfig IDE या CI में Build Variant चुनने पर सभी मापदंडों को स्वचालित रूप से बदलता है।
हाँ, Gradle विशिष्ट फ्लेवर के लिए निर्भरताएँ निर्दिष्ट करने की अनुमति देता है: demoImplementation और fullImplementation. डेमो संस्करण एक विश्लेषण लाइब्रेरी शामिल कर सकता है जबकि पूर्ण संस्करण नहीं। यह विभिन्न फ्लेवर के लिए APK आकार कम करता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें