Build Config include parametrii de compilare: tipuri de builduri, flaguri de compilare, chei de semnare și versiuni SDK, care determină modul în care aplicația este compilată pentru diferite medii. Potrivit Android Developers Guide (2026), sistemul de compilare Gradle suportă Product Flavors și Build Types pentru o configurare flexibilă. Build Config automatizează comutarea între debug și release fără modificarea manuală a codului.
Puncte cheie
Build Config — este ansamblul de setări care determină procesul de compilare, construire și împachetare a aplicației mobile. Configurația de compilare include alegerea platformei țintă, a versiunii minime de SDK, a flagurilor de optimizare, a cheilor de semnare și a variabilelor de mediu.
Proiectele mobile moderne rareori au o singură configurație de compilare. De obicei sunt mai multe: debug (pentru dezvoltare cu depanare), release (pentru producție cu optimizare), staging (pentru testare cu date reale) și diferite flavoruri (demo, versiune completă, corporativă).
Potrivit sondajului Gradle Build Tool Survey (2025), în medie un proiect Android folosește 3.2 configurații de compilare diferite, iar un proiect iOS — 2.8. Fiecare configurație poate avea propriile flaguri de compilare, certificate de semnare și URL-uri ale serverelor.
Sarcina principală a Build Config este automatizarea comutării între aceste configurații. În loc să modifice manual URL-ul serverului sau flagul de depanare, dezvoltatorul selectează Build Variant-ul dorit în IDE, iar sistemul de compilare introduce parametrii corespunzători.
Configurarea corectă a Build Config influențează critic securitatea aplicației: în buildul debug sunt activate logurile detaliate, inspectorul bazei de date și endpointurile de depanare, care trebuie excluse fizic din fișierul release. Gradle rezolvă acest lucru prin Build Types: în debug poate fi setat flagul debuggable true, în release — minifyEnabled true cu ProGuard. iOS obține același rezultat prin Swift Active Compilation Conditions, unde codul din interiorul #if DEBUG nu este compilat în configurația release.
Android folosește sistemul de compilare Gradle cu două concepte-cheie: Build Types și Product Flavors. Combinația lor formează Build Variants — fiecărui variant îi corespunde o configurație completă de compilare.
Build Type — este configurația care determină cum este compilată aplicația. În mod implicit, Gradle creează două tipuri: debug (cu depanare, fără ofuscare) și release (cu ProGuard/R8, semnat pentru publicare). Dezvoltatorul poate adăuga propriile tipuri: 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 permit crearea diferitelor versiuni ale unei singure aplicații dintr-o singură bază de cod. De exemplu: versiunea gratuită cu reclame, versiunea plătită fără reclame și versiunea corporativă cu funcționalități suplimentare. Fiecare flavor poate avea propriul applicationId, propriile resurse și dependențe SDK.
android {
productFlavors {
register("demo") {
applicationId = "com.example.app.demo"
versionNameSuffix = "-demo"
}
register("full") {
applicationId = "com.example.app"
versionNameSuffix = ""
}
}
}
Pentru fiecare Build Variant, Gradle generează clasa BuildConfig cu câmpuri de configurare. Dezvoltatorul își adaugă propriile câmpuri prin buildConfigField, iar câmpurile standard (DEBUG, APPLICATION_ID, BUILD_TYPE, VERSION_CODE, FLAVOR) sunt create automat.
// Utilizarea BuildConfig în cod
class NetworkModule {
fun createApiClient(): ApiClient {
return if (BuildConfig.DEBUG) {
ApiClient(
baseUrl = BuildConfig.API_URL,
interceptor = HttpLoggingInterceptor()
)
} else {
ApiClient(baseUrl = BuildConfig.API_URL)
}
}
}
BuildConfig permite, de asemenea, activarea sau dezactivarea funcționalităților în etapa de compilare. De exemplu, se poate adăuga câmpul FEATURE_CHAT_ENABLED și se poate activa chatul doar în versiunea completă a aplicației, fără verificări la runtime și operatori condiționali în cod.
Pentru depanarea cererilor de rețea, BuildConfig cu câmpul DEBUG permite conectarea automată a HttpLoggingInterceptor în OkHttp doar pentru buildurile debug. Acest lucru garantează că în producție nicio cerere HTTP nu va fi înregistrată, chiar dacă dezvoltatorul uită accidental să elimine logarea înainte de compilarea release.
În ecosistemul iOS, Build Config este gestionat prin Xcode Build Settings — un tabel de parametri în care fiecare parametru poate avea valori diferite pentru configurații diferite (Debug, Release, Staging).
În mod implicit, Xcode creează două configurații: Debug (pentru dezvoltare, fără optimizare) și Release (pentru producție, cu optimizare -Os). Dezvoltatorul poate adăuga propriile configurații prin meniul Project > Info > Configurations.
Pentru fiecare configurație sunt setate Build Settings: flaguri ale compilatorului (OTHER_SWIFT_FLAGS, GCC_PREPROCESSOR_DEFINITIONS), codul de semnare (CODE_SIGN_IDENTITY), profilele de provisioning și entitlements. Xcode salvează aceste setări în fișierul project.pbxproj.
Pentru gestionarea convenabilă a Build Settings, dezvoltatorii iOS folosesc fișiere .xcconfig — fișiere text cu parametri în formatul KEY = VALUE. Acesta este echivalentul .env pentru Xcode: valorile sunt conectate la proiect și suprascriu setările din 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
O parte din parametrii Build Config ajung în Info.plist — fișierul manifest al aplicației iOS. Prin Info.plist se configurează schemele URL, permisiunile (camera, microfonul), modurile de fundal și configurarea autentificării prin servicii terțe.
Valorile din xcconfig pot fi introduse în Info.plist prin sintaxa $(VARIABLE_NAME). De exemplu, $(API_BASE_URL) din Info.plist se va expanda conform configurației active de compilare. Acest lucru centralizează gestionarea parametrilor de mediu pentru toate platformele Apple.
În proiectele moderne, Build Config se integrează cu sistemele de integrare continuă: GitLab CI, GitHub Actions, Bitrise, CircleCI. Fiecare pipeline poate suprascrie parametrii Build Config prin variabile de mediu ale sistemului CI/CD.
Pentru Android, pipeline-ul CI rulează Gradle cu specificarea Build Variant: ./gradlew assembleFullRelease. Parametrii de semnare sunt transmiși prin variabilele CI: STORE_PASSWORD, KEY_ALIAS. Gradle le citește din mediul de rulare și le introduce în build.gradle.kts.
// build.gradle.kts — citirea din variabilele 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") ?: ""
}
}
}
Pentru iOS, CI folosește xcodebuild cu flaguri de configurare: -configuration Release. Certificatele de semnare sunt livrate prin secrets CI, iar profilele — prin Apple Developer Portal API sau Fastlane match.
Instrumentul Fastlane automatizează gestionarea Build Config: generează xcconfig, actualizează versiunile în Info.plist, semnează fișierele IPA compilate și le încarcă în App Store Connect. Fastlane gym (compilare) și match (semnare) — este standardul pipeline-urilor CI iOS.
Potrivit Bitrise Build Report (2025), proiectele cu Build Config configurat în CI reduc timpul de configurare manuală a compilării cu 73% și scad numărul erorilor de semnare cu 89%. Build Config automatizat — este elementul obligatoriu al unui pipeline production-ready.
Un alt aspect important — parametrizarea versionării prin Build Config. Gradle permite citirea versionCode și versionName din variabilele CI și introducerea lor dinamică în build.gradle.kts, ceea ce elimină desincronizarea versiunilor între dezvoltatori. În iOS, o sarcină similară este rezolvată prin agvtool (Apple Generic Versioning Tool), care poate incrementa numărul de build pe baza tagurilor git sau a numărului de build din CI.
Întrebări frecvente
Build Type (debug, release) determină cum este compilată aplicația: cu depanare sau fără, cu optimizare sau fără. Product Flavor (demo, full) determină ce versiune este compilată: applicationId, SDK, resurse diferite. Combinația lor se numește Build Variant.
Prin metoda buildConfigField în build.gradle.kts. Câmpul este adăugat în clasa BuildConfig generată automat și devine accesibil în cod ca BuildConfig.FIELD_NAME. Pentru șiruri de caractere, valoarea trebuie încadrată în ghilimele escape-uite.
Prin fișiere .xcconfig — unul pentru fiecare mediu. În Project > Info > Configurations se adaugă configurațiile Debug/Staging/Release, fiecare referindu-se la propriul xcconfig. Valorile sunt introduse în Info.plist prin sintaxa $(VAR_NAME).
BuildConfig separă configurația de compilare de logica aplicației. Flagurile din cod necesită modificare manuală și recompilare la comutarea mediilor. BuildConfig comută toți parametrii automat la selectarea Build Variant în IDE sau CI.
Da, Gradle permite specificarea dependențelor pentru flavoruri concrete: demoImplementation și fullImplementation. Versiunea demo poate conecta o bibliotecă de analitică, iar cea completă — nu. Acest lucru reduce dimensiunea APK pentru diferite flavoruri.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și