Как настроить build.gradle в Android‑проекте
В файлах build.gradle задаются версия AGP и Kotlin, compileSdk/minSdk, зависимости и правила сборки — то есть всё, что нужно для корректной сборки APK/AAB. Ниже — практическая структура и готовые шаблоны, которые можно вставить и сразу использовать.
Project-level (корень): плагины и репозитории
Файл в корне проекта управляет версиями плагинов и общими репозиториями. Блок plugins фиксирует версии AGP и Kotlin — это убережёт от конфликтов при обновлениях.
Пример (settings.gradle.kts или build.gradle в корне с плагинами):
plugins {
id 'com.android.application' version '8.7.2' apply false
id 'com.android.library' version '8.7.2' apply false
id 'org.jetbrains.kotlin.android' version '2.0.20' apply false
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
Практический совет: фиксируйте версии плагинов в корне и не дублируйте их в модульных build-файлах.
Используйте settings.gradle(.kts) для включения версий через version catalogs (libs.versions.toml) — управлять версиями проще и централизованно.
App-level: android { }, dependencies и buildTypes
Основной файл — app/build.gradle(.kts). Здесь указывают namespace, compileSdk, defaultConfig, buildTypes, signingConfigs и зависимости.
Пример (Groovy):
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt'
}
android {
namespace 'com.example.myapp'
compileSdk 36
defaultConfig {
applicationId "com.example.myapp"
minSdk 24
targetSdk 36
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions { jvmTarget = "17" }
}
Примеры зависимостей (группируйте по назначению):
dependencies {
// Core
implementation 'androidx.core:core-ktx:1.15.0'
implementation 'androidx.appcompat:appcompat:1.7.0'
// Network
implementation 'com.squareup.retrofit2:retrofit:2.11.0'
implementation 'com.squareup.retrofit2:converter-gson:2.11.0'
// DI
implementation 'com.google.dagger:hilt-android:2.52'
kapt 'com.google.dagger:hilt-compiler:2.52'
}
Сборки, flavor'ы, подпись и CI
- Product flavors используют applicationIdSuffix и versionNameSuffix для параллельных установок:
productFlavors {
free { applicationIdSuffix ".free"; versionNameSuffix "-free" }
pro { applicationIdSuffix ".pro" }
}
- signingConfigs для CI: храните секреты в переменных окружения, не в файлах репозитория:
signingConfigs {
release {
storeFile file(System.getenv("KEYSTORE_PATH"))
storePassword System.getenv("KEYSTORE_PASS")
keyAlias System.getenv("KEY_ALIAS")
keyPassword System.getenv("KEY_PASS")
}
}
- Сборка в CI: ./gradlew assembleRelease или сборка AAB через bundleRelease. Включите параметр --no-daemon и кеширование Gradle для ускорения.
Не копируйте старые конфигурации: AGP 8+ требует Java 17 и совместимых плагинов.
Частые ошибки
- Конфликты версий библиотек → используйте dependencyConstraints или resolutionStrategy.
- Хардкод секретов (keystore, пароли) в репозитории → храните в CI secrets.
- Несовместимый JDK/AGP → проверяйте JavaVersion и AGP-версии перед обновлением.
- Забытый minify/proguard для релиза → увеличивает размер APK и риски утечек.
FAQ
-
Как перейти на Kotlin DSL?
Перенесите build.gradle → build.gradle.kts, используйте типобезопасные плагины и обновите синтаксис зависимостей; тестируйте в ветке CI. -
Почему приложение падает после обновления библиотеки?
Часто из‑за изменений API или конфликтов транзитивных зависимостей — фиксируйте версии и проверяйте changelog. -
Нужно ли включать minifyEnabled для debug?
Нет. Minify полезен для релиза (оптимизация и обфускация), в debug он затруднит отладку.
Этот набор покрывает большинство задач по настройке build.gradle: фиксируйте версии в корне, группируйте зависимости по назначению, храните секреты вне репозитория и тестируйте сборки в CI на том же JDK, что и в локальной среде.