Build Config obejmuje parametry kompilacji: typy buildów, flagi kompilatora, klucze podpisu i wersje SDK, które określają, jak aplikacja jest kompilowana dla różnych środowisk. Według Android Developers Guide (2026), system kompilacji Gradle obsługuje Product Flavors i Build Types, umożliwiając elastyczną konfigurację. Build Config automatyzuje przełączanie między debug i release bez ręcznej zmiany kodu.
Najważniejsze
Build Config — to zbiór ustawień określających proces kompilacji, budowania i pakowania aplikacji mobilnej. Konfiguracja kompilacji obejmuje wybór platformy docelowej, minimalnej wersji SDK, flag optymalizacji, kluczy podpisu i zmiennych środowiskowych.
Nowoczesne projekty mobilne rzadko mają pojedynczą konfigurację kompilacji. Zwykle jest ich kilka: debug (do tworzenia z debugowaniem), release (do produkcji z optymalizacją), staging (do testowania na danych produkcyjnych) oraz różne warianty (demo, pełna, korporacyjna wersja).
Według ankiety Gradle Build Tool Survey (2025), średnio projekt Androida używa 3.2 różnych konfiguracji kompilacji, a projekt iOS — 2.8. Każda konfiguracja może mieć własne flagi kompilacji, certyfikaty podpisu i adresy URL serwerów.
Głównym zadaniem Build Config jest automatyzacja przełączania między tymi konfiguracjami. Zamiast ręcznej zmiany adresu URL serwera lub flagi debugowania, programista wybiera odpowiedni Build Variant w IDE, a system kompilacji podstawia odpowiednie parametry.
Prawidłowa konfiguracja Build Config ma krytyczny wpływ na bezpieczeństwo aplikacji: w wersji debug włączone są szczegółowe logi, inspektor bazy danych i endpointy debugowania, które muszą być fizycznie wykluczone z binarnego pliku release. Gradle rozwiązuje to przez Build Types: w debug można ustawić flagę debuggable true, w release — minifyEnabled true z ProGuard. iOS osiąga to samo przez Swift Active Compilation Conditions, gdzie kod wewnątrz #if DEBUG nie jest kompilowany w konfiguracji release.
Android używa systemu kompilacji Gradle z dwoma kluczowymi pojęciami: Build Types i Product Flavors. Ich kombinacja tworzy Build Variants — każdemu wariantowi odpowiada pełna konfiguracja kompilacji.
Build Type — to konfiguracja określająca, jak kompilowana jest aplikacja. Domyślnie Gradle tworzy dwa typy: debug (z debugowaniem, bez obfuskacji) i release (z ProGuard/R8, podpisany do publikacji). Programista może dodawać własne typy: 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 pozwalają tworzyć różne wersje jednej aplikacji z jednej bazy kodu. Na przykład: bezpłatna wersja z reklamami, płatna bez reklam i korporacyjna z dodatkowymi funkcjami. Każdy wariant może mieć własny applicationId, zasoby i zależności SDK.
android {
productFlavors {
register("demo") {
applicationId = "com.example.app.demo"
versionNameSuffix = "-demo"
}
register("full") {
applicationId = "com.example.app"
versionNameSuffix = ""
}
}
}
Dla każdego Build Variant Gradle generuje klasę BuildConfig z polami konfiguracji. Programista dodaje własne pola przez buildConfigField, a standardowe pola (DEBUG, APPLICATION_ID, BUILD_TYPE, VERSION_CODE, FLAVOR) tworzone są automatycznie.
// Użycie BuildConfig w kodzie
class NetworkModule {
fun createApiClient(): ApiClient {
return if (BuildConfig.DEBUG) {
ApiClient(
baseUrl = BuildConfig.API_URL,
interceptor = HttpLoggingInterceptor()
)
} else {
ApiClient(baseUrl = BuildConfig.API_URL)
}
}
}
BuildConfig pozwala również włączać lub wyłączać funkcje na etapie kompilacji. Można na przykład dodać pole FEATURE_CHAT_ENABLED i włączać czat tylko w pełnej wersji aplikacji, bez sprawdzeń runtime i instrukcji warunkowych w kodzie.
Do debugowania żądań sieciowych BuildConfig z polem DEBUG pozwala automatycznie podłączać HttpLoggingInterceptor w OkHttp tylko dla wersji debug. Gwarantuje to, że w produkcji żadne żądanie HTTP nie zostanie zalogowane, nawet jeśli programista przypadkiem zapomni usunąć logowanie przed kompilacją release.
W ekosystemie iOS Build Config jest zarządzany przez Xcode Build Settings — tabelę parametrów, gdzie każdy parametr może mieć różne wartości dla różnych konfiguracji (Debug, Release, Staging).
Domyślnie Xcode tworzy dwie konfiguracje: Debug (do tworzenia, bez optymalizacji) i Release (do produkcji, z optymalizacją -Os). Programista może dodawać własne konfiguracje przez menu Project > Info > Configurations.
Dla każdej konfiguracji ustawiane są Build Settings: flagi kompilatora (OTHER_SWIFT_FLAGS, GCC_PREPROCESSOR_DEFINITIONS), kod podpisu (CODE_SIGN_IDENTITY), profile provisioning i entitlements. Xcode zapisuje te ustawienia w pliku project.pbxproj.
Dla wygodnego zarządzania Build Settings programiści iOS używają plików .xcconfig — plików tekstowych z parametrami w formacie KEY = VALUE. To odpowiednik .env dla Xcode: wartości są podłączane do projektu i nadpisują ustawienia w 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
Część parametrów Build Config trafia do Info.plist — pliku manifestu aplikacji iOS. Przez Info.plist konfigurowane są schematy URL, uprawnienia (kamera, mikrofon), tryby pracy w tle i konfiguracja logowania przez serwisy zewnętrzne.
Wartości z xcconfig można podstawiać do Info.plist przez składnię $(VARIABLE_NAME). Na przykład $(API_BASE_URL) w Info.plist zostanie rozwinięte zgodnie z aktywną konfiguracją kompilacji. To centralizuje zarządzanie parametrami środowiska dla wszystkich platform Apple.
W nowoczesnych projektach Build Config integruje się z systemami ciągłej integracji: GitLab CI, GitHub Actions, Bitrise, CircleCI. Każdy pipeline może nadpisywać parametry Build Config przez zmienne środowiskowe systemu CI/CD.
Dla Androida pipeline CI uruchamia Gradle z podaniem Build Variant: ./gradlew assembleFullRelease. Parametry podpisu przekazywane są przez zmienne CI: STORE_PASSWORD, KEY_ALIAS. Gradle czyta je ze środowiska uruchomieniowego i podstawia do build.gradle.kts.
// build.gradle.kts — odczyt ze zmiennych 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") ?: ""
}
}
}
Dla iOS CI używa xcodebuild z flagami konfiguracji: -configuration Release. Certyfikaty podpisu dostarczane są przez secrets CI, a profile — przez Apple Developer Portal API lub Fastlane match.
Narzędzie Fastlane automatyzuje zarządzanie Build Config: generuje xcconfig, aktualizuje wersje w Info.plist, podpisuje zbudowane IPA i przesyła je do App Store Connect. Fastlane gym (kompilacja) i match (podpis) — to standard pipeline'ów CI iOS.
Według Bitrise Build Report (2025), projekty ze skonfigurowanym Build Config w CI skracają czas ręcznej konfiguracji kompilacji o 73% i zmniejszają liczbę błędów podpisu o 89%. Zautomatyzowany Build Config to obowiązkowy element pipeline'a klasy production-ready.
Kolejny ważny aspekt — parametryzacja wersjonowania przez Build Config. Gradle pozwala czytać versionCode i versionName ze zmiennych CI i podstawiać je do build.gradle.kts dynamicznie, co eliminuje rozbieżności wersji między programistami. W iOS podobne zadanie rozwiązuje agvtool (Apple Generic Versioning Tool), który potrafi zwiększać numer kompilacji na podstawie tagów git lub numeru builda w CI.
Często zadawane pytania
Build Type (debug, release) określa jak kompilowana jest aplikacja: z debugowaniem lub bez, z optymalizacją lub bez. Product Flavor (demo, full) określa która wersja jest kompilowana: różne applicationId, SDK, zasoby. Ich kombinacja nazywa się Build Variant.
Poprzez metodę buildConfigField w build.gradle.kts. Pole jest dodawane do automatycznie generowanej klasy BuildConfig i staje się dostępne w kodzie jako BuildConfig.FIELD_NAME. Dla ciągów znaków wartość należy opakować w znaki ucieczki.
Poprzez pliki .xcconfig — po jednym na każde środowisko. W Project > Info > Configurations dodawane są konfiguracje Debug/Staging/Release, każda odwołuje się do własnego pliku xcconfig. Wartości podstawiane są do Info.plist przez składnię $(VAR_NAME).
BuildConfig oddziela konfigurację kompilacji od logiki aplikacji. Flagi w kodzie wymagają ręcznej zmiany i ponownej kompilacji przy przełączaniu środowisk. BuildConfig przełącza wszystkie parametry automatycznie przy wyborze Build Variant w IDE lub CI.
Tak, Gradle pozwala określać zależności dla konkretnych wariantów: demoImplementation i fullImplementation. Wersja demo może podłączać bibliotekę do analityki, a pełna — nie. To zmniejsza rozmiar APK dla różnych wariantów.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również