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 и включать чат только в полной версии приложения, без runtime проверок и условных операторов в коде.
Для отладки сетевых запросов BuildConfig с полем DEBUG позволяет автоматически подключать HttpLoggingInterceptor в OkHttp только для debug-сборок. Это гарантирует, что в production ни один 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), 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 схемы, permissions (камера, микрофон), background modes и конфигурация входа через сторонние сервисы.
Значения из 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.ИМЯ_ПОЛЯ. Для строк значение нужно оборачивать в экранированные кавычки.
Через .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 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также