Gradle je sestavovací systém, který automatizuje kompilaci, testování a balení Android aplikací. Na rozdíl od Apache Ant nebo Maven podporuje inkrementální sestavování a ukládání výsledků do mezipaměti. Více o možnostech si přečtěte v oficiální dokumentaci Gradle. Od roku 2013 je nástroj používán jako standardní sestavovací systém pro Android projekty v Android Studio.
Hlavní body
Gradle je nástroj pro automatizaci sestavování s otevřeným zdrojovým kódem napsaný v Javě, běžící na JVM. Na vstupu přijímá zdrojový kód, závislosti a zdroje a na výstupu vydává hotovou aplikaci — APK nebo AAB pro Android. V jádru Gradle leží koncept orientovaného acyklického grafu úkolů (DAG), kde každý úkol je atomická jednotka práce a vazby mezi nimi určují pořadí provádění. Na rozdíl od Make nebo Ant, Gradle nevyžaduje ruční popis posloupnosti kroků: stačí deklarovat závislosti mezi úkoly a systém sám sestaví optimální pořadí. Tento přístup činí Gradle flexibilním a škálovatelným pro projekty jakékoli velikosti.
Systém používá tři fáze provádění: inicializaci (určení zúčastněných projektů), konfiguraci (sestavení grafu úkolů) a provádění (spuštění úkolů v potřebném pořadí). Fáze konfigurace je klíčový rozdíl Gradle: celý sestavovací skript se provádí před spuštěním úkolů, což umožňuje dynamicky měnit graf v závislosti na podmínkách. To dává možnost například přidávat úkoly pouze pro určité varianty sestavení bez duplikování kódu. Sestavovač je napsán v Groovy, ale konfigurační soubory podporují dva jazyky: Groovy DSL a Kotlin DSL.
Android plugin pro Gradle — com.android.application a com.android.library, které přidávají do projektu úkoly pro práci s Android nástroji. Když vývojář spustí sestavení, Gradle postupně provádí desítky úkolů: kompilaci Kotlin a Java přes javac nebo kotlinc, zpracování zdrojů přes AAPT2, generování R.java, kompilaci bajtkódu do DEX přes D8 nebo R8, podepisování a zipování APK. Každý úkol kontroluje, zda se jeho vstupní data změnila, a pokud ne — použije výsledek z mezipaměti. Tento mechanismus se nazývá inkrementální sestavování a urychluje opakovanou kompilaci o 60–80% ve srovnání s úplným přestavěním.
Konfigurace Android modulu se nastavuje v bloku android souboru build.gradle.kts. Uvnitř bloku se definují compileSdk, minSdk, targetSdk, verze aplikace, podpisy a další parametry. Gradle automaticky vytváří pro každý modul několik variant sestavení — kombinaci typu (release, debug) a příchutě. Například pro modul se dvěma příchutěmi a dvěma typy Gradle generuje čtyři úkoly: assembleDemoDebug, assembleDemoRelease, assembleFullDebug, assembleFullRelease. Všechny tyto úkoly lze provádět samostatně nebo spustit jedním příkazem pro všechny varianty najednou.
Každý Android projekt obsahuje dva úrovně konfigurace: kořenový build.gradle.kts (nastavení pro všechny moduly) a modulární build.gradle.kts (nastavení pro konkrétní modul). V kořenovém souboru se deklarují pluginy bez použití, repozitáře a společné proměnné. V modulárním souboru se pluginy aplikují na konkrétní modul a konfigurují se parametry sestavení. Tento přístup umožňuje centrálně spravovat verze závislostí prostřednictvím katalogu verzí nebo bloku ext.
@Suppress("UnstableApiUsage")
plugins {
id("com.android.application") version "8.2.2"
id("org.jetbrains.kotlin.android") version "1.9.22"
}
android {
namespace = "com.example.myapp"
compileSdk = 34
defaultConfig {
applicationId = "com.example.myapp"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0"
}
}Blok dependencies — další kritický prvek build.gradle.kts. V něm se uvádějí knihovny, moduly a souborové závislosti, které aplikace potřebuje. Gradle podporuje několik konfigurací závislosti: implementation (přístupná pouze aktuálnímu modulu), api (přístupná i závislým modulům), testImplementation (pouze pro testy), androidTestImplementation (pro instrumentační testy) a compileOnly (pouze ve fázi kompilace). Každá konfigurace spravuje viditelnost tříd v grafu závislostí, což ovlivňuje dobu sestavení a velikost konečného artefaktu.
dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
implementation("androidx.activity:activity-compose:1.8.2")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
}Build variant — kombinace build type a product flavor, která určuje verzi aplikace s jedinečným nastavením, kódem a zdroji. Build type (typ sestavení) nastavuje parametry balení: debug (s laděním a příponou .debug) nebo release (s obfuskací a podpisem). Product flavor (produktová příchuť) určuje funkční varianty: například demo (omezená verze) a full (plná verze s dalšími možnostmi). Gradle automaticky generuje úkoly pro každou kombinaci, což umožňuje sestavit všechny verze jedním příkazem.
android {
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
debug {
applicationIdSuffix = ".debug"
}
}
flavorDimensions += "version"
productFlavors {
create("demo") {
dimension = "version"
applicationIdSuffix = ".demo"
}
create("full") {
dimension = "version"
applicationIdSuffix = ".full"
}
}
}Každému build variant odpovídá samostatný source set. Gradle používá adresáře src/demo/release, src/full/debug a další, kde jsou uloženy jedinečné zdroje, manifesty a zdrojový kód pro konkrétní variantu. Společný kód zůstává v src/main. Tento přístup umožňuje znovu používat hlavní logiku a nahrazovat pouze odlišující se části: řetězce, ikony, API endpointy nebo konfigurační soubory. Source set může přepsat jakékoli zdroje z main: manifest, drawable, values nebo dokonce Kotlin třídy. Při sestavování konkrétní varianty Gradle spojuje soubory z main a příslušného source set, přičemž soubory z varianty mají prioritu.
Ekosystém Gradle pluginů pokrývá všechny fáze vývoje Android aplikací. Oficiální pluginy od Google zahrnují com.android.application (pro modul aplikace), com.android.library (pro knihovní modul), com.android.test (pro testovací moduly) a Kotlin pluginy od JetBrains. Pluginy přidávají do projektu nové úkoly, rozšiřují DSL o nové konfigurační bloky a připojují další nástroje. Bez pluginu com.android.application projekt nemůže sestavit APK: tento plugin registruje všechny Android-specifické úkoly a spojuje je do grafu sestavení.
Pluginy třetích stran řeší užší úkoly. Google Services (com.google.gms.google-services) integruje Firebase a Google Play Services, automaticky vkládá google-services.json do sestavení. Hilt (dagger.hilt.android.plugin) generuje kód pro vkládání závislostí ve fázi kompilace. Safe Args (androidx.navigation.safeargs.kotlin) vytváří typově bezpečné třídy pro navigaci mezi fragmenty. Každý plugin se připojuje v kořenovém build.gradle.kts přes blok plugins a obvykle vyžaduje minimální konfiguraci. Gradle automaticky řeší tranzitivní závislosti mezi pluginy a zaručuje kompatibilitu verzí prostřednictvím Bom souborů a katalogu verzí.
Task (úkol) — atomická jednotka práce v Gradle. Každý úkol má vstupní data, výstupní data a akci. Vestavěné úkoly pro Android zahrnují assemble (sestavení všech variant), lint (kontrola kódu), test (spuštění unit testů) a clean (vyčištění dočasných souborů). Vývojář může přidávat vlastní úkoly pomocí Groovy nebo Kotlin DSL. Vlastní úkoly jsou užitečné pro automatizaci rutinních operací: generování reportů, kopírování artefaktů, nasazování na testovací zařízení nebo integraci s CI systémy.
tasks.register("printBuildInfo") {
description = "Zobrazuje informace o sestavení"
group = "custom"
doLast {
println("Build variant: ${project.name}")
println("Version: ${android.defaultConfig.versionName}")
}
}Každý úkol může záviset na jiných úkolech prostřednictvím mechanismu dependsOn. Pokud úkol A závisí na úkolu B, Gradle zaručuje, že B se provede před A. Systém nevyžaduje ruční uvádění pořadí pro každý pár — stačí deklarovat závislosti a Gradle sestaví orientovaný graf optimalizovaný pro paralelní provádění nezávislých úkolů. Vestavěné úkoly Android pluginu jsou již vzájemně propojeny: lint závisí na kompilaci, test závisí na assemble, assembleDebug závisí na compileDebugKotlin. Vývojář může vložit své vlastní úkoly do libovolného uzlu grafu pomocí dependsOn, mustRunAfter nebo shouldRunAfter.
Jedním z častých problémů — konflikt verzí závislostí, kdy dvě knihovny vyžadují různé verze stejné tranzitivní závislosti. Gradle hlásí chybu konfliktu, ale ne vždy nabízí automatické řešení. Pro diagnostiku použijte příkaz ./gradlew :app:dependencies, který zobrazí úplný strom závislostí. Doporučuje se vynutit verzi konfliktní knihovny pomocí bloku resolutionStrategy. Dalším běžným scénářem — pomalé sestavování kvůli chybějícímu inkrementálnímu zpracování. Zkontrolujte, že všechny pluginy jsou aktualizovány, Gradle Daemon je zapnutý (org.gradle.daemon=true) a v gradle.properties je nastavena dostatečná paměť: org.gradle.jvmargs=-Xmx4096m.
Problémy s ukládáním do mezipaměti vznikají po aktualizaci závislostí: Gradle může používat zastaralou mezipaměť a sestavení končí chybou. Řešení — spusťte sestavení s přepínačem --refresh-dependencies nebo vyčistěte mezipaměť ručně přes ./gradlew cleanBuildCache. Třetí nejčastější chyba — nekompatibilita verzí Android Gradle Plugin (AGP) a Gradle. Každá verze AGP vyžaduje určitou minimální verzi Gradle. Tabulka kompatibility je zveřejněna na developer.android.com. Pokud verze nejsou kompatibilní, Gradle skončí chybou ve fázi konfigurace se zprávou o minimální požadované verzi. Vždy kontrolujte, že verze Gradle wrapper odpovídá požadavkům AGP.
Často kladené otázky
Gradle je program-automatizátor sestavování projektů. Vezme váš zdrojový kód v Kotlin nebo Java, připojí knihovny z internetu, vše zkompiluje do bajtkódu a zabalí do APK. Běží na JVM a používá deklarativní skripty místo ručních instrukcí. Vývojář potřebuje pouze popsat pravidla a zbytek udělá Gradle sám.
Build.gradle se píše v Groovy — dynamickém jazyce s flexibilní syntaxí a menší přísností. Build.gradle.kts používá Kotlin DSL: přísná typizace, automatické doplňování v Android Studio a kontrola chyb ve fázi kompilace. Google doporučuje Kotlin DSL pro všechny nové projekty. Groovy soubory se snadněji migrují, ale Kotlin soubory jsou spolehlivější v údržbě.
Zapněte Gradle Daemon (org.gradle.daemon=true) a paralelní sestavování (org.gradle.parallel=true). Zvyšte paměť JVM na 4–8 GB pomocí org.gradle.jvmargs. Používejte konfiguraci projektů na vyžádání (org.gradle.configureondemand=true). U Android projektů nakonfigurujte ukládání úkolů do mezipaměti a sestavování pouze pro potřebné ABI. V Android Studio spusťte Build Analyzer k nalezení úzkých míst.
Build variant — je kombinace build type (například debug nebo release) a product flavor (například demo nebo full). Každá varianta může mít vlastní název balíčku, verzi, zdroje a zdrojové soubory. Gradle automaticky vytváří samostatný úkol sestavení pro každou variantu. To umožňuje sestavit několik verzí aplikace z jednoho projektu.
Závislosti se přidávají v bloku dependencies souboru build.gradle.kts. Formát zápisu: configuration("group:artifact:version"). Například implementation("androidx.core:core-ktx:1.12.0"). Pro testy použijte testImplementation, pro instrumentační testy — androidTestImplementation. Verze je vhodné vyčlenit do samostatného katalogu verzí (version catalog) pomocí souboru libs.versions.toml.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také