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-এ প্রতিস্থাপন করা যেতে পারে। উদাহরণস্বরূপ, Info.plist-এ $(API_BASE_URL) সক্রিয় বিল্ড কনফিগারেশন অনুসারে প্রসারিত হবে। এটি সমস্ত 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-এ গতিশীলভাবে প্রতিস্থাপন করতে দেয়, যা ডেভেলপারদের মধ্যে সংস্করণ অসম synchronization দূর করে। 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন