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 адреса на сървъра или флага за отстраняване на грешки, разработчикът избира желания Build Variant в IDE, а системата за компилация вмъква съответните параметри.
Правилната настройка на Build Config оказва критично влияние върху сигурността на приложението: в debug билда са активирани подробни логове, инспектор на базата данни и дебъг крайни точки, които трябва физически да бъдат изключени от release бинарния файл. Gradle решава това чрез Build Types: в debug може да се зададе флагът debuggable true, в release — minifyEnabled true с ProGuard. 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 и чатът да се активира само в пълната версия на приложението, без проверки по време на изпълнение и условни оператори в кода.
За отстраняване на грешки в мрежовите заявки BuildConfig с полето DEBUG позволява автоматично свързване на HttpLoggingInterceptor в OkHttp само за debug билдове. Това гарантира, че в продукцията нито една HTTP заявка няма да бъде логвана, дори ако разработчикът случайно забрави да премахне логването преди компилирането на release.
В екосистемата на 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), provisioning профили и entitlements. Xcode записва тези настройки във файла project.pbxproj.
За удобно управление на Build Settings разработчиците за iOS използват .xcconfig файлове — текстови файлове с параметри във формат KEY = VALUE. Това е аналогът на .env за Xcode: стойностите се свързват с проекта и презаписват настройките в 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 могат да се вмъкват в Info.plist чрез синтаксиса $(VARIABLE_NAME). Например $(API_BASE_URL) в Info.plist ще се разгърне според активната конфигурация на компилацията. Това централизира управлението на параметрите на средата за всички платформи на Apple.
В съвременните проекти Build Config се интегрира със системите за непрекъсната интеграция: GitLab CI, GitHub Actions, Bitrise, CircleCI. Всеки пайплайн може да презаписва параметрите на Build Config чрез променливи на средата на CI/CD системата.
За Android CI пайплайнът стартира Gradle с посочване на Build Variant: ./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) проектите с конфигуриран Build Config в CI намаляват времето за ръчна настройка на компилацията с 73% и намаляват броя на грешките при подписване с 89%. Автоматизираният Build Config — задължителен елемент от production-ready пайплайна.
Друг важен аспект — параметризирането на версиите чрез Build Config. Gradle позволява четене на versionCode и versionName от CI променливи и динамичното им вмъкване в build.gradle.kts, което елиминира десинхронизацията на версиите между разработчиците. В iOS подобна задача се решава чрез agvtool (Apple Generic Versioning Tool), който може да увеличава номера на билда въз основа на git тагове или номера на билда в CI.
Често задавани въпроси
Build Type (debug, release) определя как се изгражда приложението: с отстраняване на грешки или без, с оптимизация или без. Product Flavor (demo, full) определя коя версия се изгражда: различни applicationId, SDK, ресурси. Тяхната комбинация се нарича Build Variant.
Чрез метода buildConfigField в build.gradle.kts. Полето се добавя към автоматично генерирания клас BuildConfig и става достъпно в кода като BuildConfig.FIELD_NAME. За низове стойността трябва да се обгърне в екранирани кавички.
Чрез .xcconfig файлове — по един за всяка среда. В Project > Info > Configurations се добавят конфигурациите Debug/Staging/Release, всяка от които се позовава на своя xcconfig. Стойностите се вмъкват в Info.plist чрез синтаксиса $(VAR_NAME).
BuildConfig разделя конфигурацията на компилацията от логиката на приложението. Флаговете в кода изискват ръчна промяна и прекомпилиране при превключване на средите. BuildConfig превключва всички параметри автоматично при избора на Build Variant в IDE или CI.
Да, Gradle позволява посочването на зависимости за конкретни флейвъри: demoImplementation и fullImplementation. Демо версията може да свърже библиотека за аналитика, а пълната — не. Това намалява размера на APK за различните флейвъри.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също