Gradle: podstata sestavovacího systému pro Android a build.gradle

Autor: IT Sectr Publikováno: 2026-02-12 Doba čtení: 9 min

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 — standardní sestavovací systém pro Android od roku 2013, nahrazující Ant a Maven
  • Build.gradle.kts v Kotlin DSL — moderní standard konfigurace s kontrolou typů
  • Build variants kombinují typy sestavení a produktové příchutě pro různé verze aplikace
  • Pluginy rozšiřují funkcionalitu: od aplikace Android nástrojů po publikaci buildů
  • Inkrementální sestavování a ukládání do mezipaměti zkracují čas opakované kompilace několikanásobně

Co je Gradle?

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.

Jak Gradle řídí sestavování Android projektů?

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.

Build.gradle a build.gradle.kts: struktura konfigurace

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.

Kotlin
@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.

Kotlin
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 variants: varianty sestavení aplikace

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.

Kotlin
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.

Gradle pluginy pro Android: rozšíření možností

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í.

Gradle tasky: automatizace procesů sestavování

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.

Kotlin
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.

Typické chyby při práci s Gradle

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

Co je Gradle jednoduše řečeno?

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.

Čím se liší build.gradle.kts od build.gradle?

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ě.

Jak urychlit sestavování Gradle?

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.

Co je build variant v Android?

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.

Jak přidat závislost v Gradle?

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í

  • Gradle — standardní sestavovací systém pro Android, běžící na JVM a používající DAG graf úkolů
  • Inkrementální sestavování a ukládání do mezipaměti zkracují čas opakované kompilace o 60–80%
  • Kotlin DSL (build.gradle.kts) — moderní formát konfigurace s automatickým doplňováním a kontrolou typů
  • Build variants kombinují build type a product flavor, vytvářejí samostatné source set pro každou variantu
  • Pluginy rozšiřují Gradle: od základního Android pluginu po Firebase, Hilt a Safe Args
  • Vlastní tasky umožňují automatizovat libovolné fáze sestavení a integrace
  • Hlavní problémy — konflikty verzí, pomalé sestavování a nekompatibilita AGP s verzí Gradle

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í.

Prodiskutovat projekt

Přečtěte si také