build.gradle: τι είναι, σύνταξη και διαμόρφωση στο Android

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-05-31 Χρόνος ανάγνωσης: 9 λεπ

Το build.gradle είναι το κύριο αρχείο δόμησης ενός Android έργου στο Gradle, το οποίο περιέχει οδηγίες για μεταγλώττιση, συσκευασία και υπογραφή της εφαρμογής. Κάθε module στο έργο έχει το δικό του build.gradle: ένα σε επίπεδο έργου (project-level) και ένα για κάθε module (module-level). Σύμφωνα με το Google Android Developers, 2025, η σωστή διαμόρφωση του build.gradle επιταχύνει τη δόμηση έως 40% και εξαλείφει τις συγκρούσεις εξαρτήσεων. Η σύνταξη υποστηρίζει δύο γλώσσες: Groovy (build.gradle) και Kotlin DSL (build.gradle.kts).

Βασικά σημεία

  • build.gradle — αρχείο δόμησης Gradle με ρυθμίσεις πρόσθετων, εξαρτήσεων και διαμόρφωσης Android.
  • Project-level καθορίζει τα πρόσθετα και τα αποθετήρια για όλα τα module.
  • Module-level περιέχει το μπλοκ android με buildTypes, productFlavors και sourceSets.
  • Groovy vs Kotlin DSL — δύο συντάξεις· το Kotlin DSL είναι προτιμότερο λόγω type-safety.
  • dependencies διαχειρίζεται βιβλιοθήκες: implementation, api, compileOnly, runtimeOnly.

Τι είναι το build.gradle;

build.gradle είναι ένα σενάριο δόμησης στη γλώσσα Groovy (επέκταση .gradle) ή Kotlin (.gradle.kts) που διαχειρίζεται όλες τις πτυχές μεταγλώττισης μιας εφαρμογής Android. Το Gradle είναι ένα αυτόματο σύστημα δόμησης που υιοθετήθηκε από την Google το 2013 ως πρότυπο για Android. Το build.gradle περιγράφει: ποια πρόσθετα εφαρμόζονται (Android, Kotlin, βιβλιοθήκες), ποιες εξαρτήσεις συνδέονται, ποιες εκδόσεις SDK χρησιμοποιούνται, πώς να υπογράψετε την εφαρμογή και πού να δημοσιεύσετε.

Η διαδικασία δόμησης περιλαμβάνει τρεις φάσεις: Initialization (καθορισμός module), Configuration (εκτέλεση σεναρίων build.gradle), Execution (εκτέλεση εργασιών). Το build.gradle εκτελείται στη φάση Configuration, όταν το Gradle δημιουργεί το γράφημα εργασιών. Σε αυτό το σημείο καθορίζονται τα Build Variants, υπολογίζονται οι εξαρτήσεις και διαμορφώνονται οι εργασίες. Σημαντικό: το build.gradle είναι κώδικας, όχι απλώς διαμόρφωση. Μπορεί να περιέχει συνθήκες, βρόχους, κλήσεις μεθόδων και εξωτερικά σενάρια.

Τα αρχεία Gradle αποθηκεύονται στη ρίζα του module (app/build.gradle) και στη ρίζα του έργου (build.gradle). Επιπλέον, το Gradle υποστηρίζει apply from — σύνδεση εξωτερικών σεναρίων Gradle. Αυτό επιτρέπει την εξαγωγή επαναλαμβανόμενης λογικής σε αρχεία με κοινές ρυθμίσεις. Με την εμφάνιση των Convention Plugins (AGP 7+), το apply from θεωρείται παρωχημένο — τα Convention Plugins παρέχουν έναν type-safe και σύνθετο τρόπο επαναχρησιμοποίησης της διαμόρφωσης μεταξύ module.

Εξέλιξη του build.gradle

Από το 2013, η σύνταξη του build.gradle έχει υποστεί σημαντικές αλλαγές: από το Groovy με δυναμικές διαμορφώσεις έως το Kotlin DSL με ελέγχους σε χρόνο μεταγλώττισης. Το AGP εξελίχθηκε από την έκδοση 1.0 στην 8.7 (2025). Βασικά ορόσημα: AGP 3.0 (Java 8 desugar, new variant API), AGP 4.0 (view binding, Java 11), AGP 7.0 (Kotlin DSL προεπιλεγμένο, Java 11 min), AGP 8.0 (non-transitive R classes, διαμόρφωση δόμησης σε Kotlin), AGP 8.7 (KSP αντί kapt, γρήγορη διαμόρφωση).

Project-level και Module-level build.gradle

Project-level build.gradle (ρίζα) καθορίζει τα πρόσθετα, τα αποθετήρια και τις διαμορφώσεις κοινές για όλα τα module. Κύρια μπλοκ: plugins (σύνδεση πρόσθετων Gradle), repositories (πηγές εξαρτήσεων: mavenCentral, google, jitpack). Στη ρίζα build.gradle συνήθως δεν υπάρχει μπλοκ android — εμφανίζεται στα module. Το Project-level μπορεί επίσης να περιέχει μπλοκ subprojects για κοινή διαμόρφωση όλων των υποέργων, αν και τα Convention Plugins είναι προτιμότερα.

Module-level build.gradle (π.χ., app/build.gradle) περιγράφει ένα συγκεκριμένο module. Αν το module είναι εφαρμογή, εφαρμόζει το πρόσθετο com.android.application. Αν είναι βιβλιοθήκη — com.android.library. Στο module-level βρίσκονται: το μπλοκ android (compileSdk, defaultConfig, buildTypes, productFlavors), το μπλοκ dependencies (εξαρτήσεις module) και προαιρετικά μπλοκ για διαμόρφωση δοκιμών και δόμησης. Το Module-level εκτελείται μετά το project-level και μπορεί να παρακάμψει κοινές ρυθμίσεις.

Από το AGP 8.0, η ρίζα build.gradle μπορεί να χρησιμοποιεί version catalogs (libs.versions.toml) για κεντρική διαχείριση εκδόσεων εξαρτήσεων. Το version catalog είναι ένα αρχείο στον κατάλογο gradle/ που περιέχει εκδόσεις, βιβλιοθήκες και πρόσθετα. Στο build.gradle, οι εξαρτήσεις συνδέονται μέσω libs: implementation(libs.retrofit). Τα version catalogs είναι υποχρεωτικά για νέα έργα και συνιστώνται για όλα τα έργα με τρία ή περισσότερα module.

kotlin
// settings.gradle.kts — ρίζα έργου
pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

// build.gradle.kts (επίπεδο έργου)
plugins {
    id("com.android.application") version "8.7.0" apply false
    id("org.jetbrains.kotlin.android") version "2.0.21" apply false
}

// app/build.gradle.kts (επίπεδο module)
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("com.google.devtools.ksp")
}

android {
    namespace = "com.example.myapp"
    compileSdk = 35

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 26
        targetSdk = 35
        versionCode = 1
        versionName = "1.0.0"
    }
}

Groovy vs Kotlin DSL

Groovy είναι μια δυναμική γλώσσα JVM που ήταν η αρχική σύνταξη του Gradle. Τα σενάρια Groovy (.gradle) χρησιμοποιούν δυναμική τυποποίηση: οι τύποι μπορούν να παραλειφθούν, τα εισαγωγικά μπορούν να χρησιμοποιηθούν ή όχι, μέθοδοι που δεν υπάρχουν στη φάση μεταγλώττισης μπορούν να κληθούν. Η ευελιξία του Groovy είναι επίσης το μειονέκτημά του: το IDE δεν μπορεί να ελέγξει τη σύνταξη και τους τύπους πριν από την εκτέλεση του σεναρίου, οδηγώντας σε σφάλματα χρόνου εκτέλεσης με λανθασμένο όνομα παραμέτρου ή τύπο.

Kotlin DSL (.gradle.kts) χρησιμοποιεί τη στατική τυποποίηση του Kotlin. Το IDE ελέγχει τους τύπους, προτείνει διαθέσιμες παραμέτρους μέσω αυτόματης συμπλήρωσης και επισημαίνει σφάλματα στη φάση επεξεργασίας. Το Kotlin DSL είναι πιο αργό στη φάση Configuration (λόγω μεταγλώττισης αρχείων .kts σε bytecode), αλλά η Google βελτιώνει συνεχώς την απόδοση: το AGP 8.5+ χρησιμοποιεί Gradle Configuration Cache και Caching Kotlin DSL compilation, μειώνοντας τη διαφορά σε 1-2 δευτερόλεπτα.

Η Google συνιστά Kotlin DSL για όλα τα νέα έργα και σταδιακή μετεγκατάσταση υπαρχόντων έργων. Η μετεγκατάσταση από Groovy σε Kotlin DSL είναι απλή: τα εισαγωγικά αντικαθίστανται από παρενθέσεις, προστίθενται τύποι, οι τελεστές μετατρέπονται σε συναρτήσεις. Οι περισσότερες βιβλιοθήκες παρέχουν παραδείγματα Kotlin DSL στην τεκμηρίωση. Για σύνθετες περιπτώσεις (Custom Plugin, Task Graph), το Kotlin DSL παρέχει type-safe API και αποτρέπει σφάλματα που στο Groovy ανακαλύπτονται μόνο κατά το χρόνο εκτέλεσης. Τα version catalogs (libs.versions.toml) λειτουργούν το ίδιο και με τις δύο συντάξεις.

ΧαρακτηριστικόGroovy (.gradle)Kotlin DSL (.gradle.kts)
ΤυποποίησηΔυναμικήΣτατική
Έλεγχος IDEΠεριορισμένοςΠλήρης (αυτόματη συμπλήρωση, τύποι)
Ταχύτητα διαμόρφωσηςΓρηγορότερη (χωρίς μεταγλώττιση)Αργότερη (μεταγλώττιση .kts)
ΣφάλματαΧρόνου εκτέλεσηςΧρόνου μεταγλώττισης
ΣύστασηΜόνο παλιά έργαΝέα έργα και μετεγκατάσταση

Μπλοκ android: διαμόρφωση εφαρμογής

compileSdk, minSdk και targetSdk

Μπλοκ android — το κεντρικό στοιχείο του module-level build.gradle. Μέσα σε αυτό διαμορφώνονται: namespace (για R και BuildConfig), compileSdk, defaultConfig, buildTypes, productFlavors, sourceSets, compileOptions, packaging, bundle. Όλες οι παράμετροι του μπλοκ android ισχύουν μόνο για module Android. Αν το module είναι βιβλιοθήκη, αντί για εφαρμογή χρησιμοποιείται το πρόσθετο βιβλιοθήκης και δεν υπάρχει applicationId στο μπλοκ android.

compileSdk — η έκδοση SDK με την οποία μεταγλωττίζεται ο κώδικας. Πρέπει να είναι ίση με το πιο πρόσφατο Android API (κατά τη σύνταξη — 35). minSdk — η ελάχιστη έκδοση API για υποστήριξη. targetSdk — η έκδοση στην οποία στοχεύει η εφαρμογή (οι αλλαγές συμπεριφοράς αυτής της έκδοσης εφαρμόζονται). Διαφορά μεταξύ compileSdk και targetSdk: το compileSdk καθορίζει τα διαθέσιμα API, το targetSdk — τη συμπεριφορά χρόνου εκτέλεσης. Σύσταση: compileSdk = latest, targetSdk = latest - 1 (για δοκιμή προσαρμογής σε νέες αλλαγές).

compileOptions ορίζει τη συμβατότητα Java: sourceCompatibility και targetCompatibility. Το AGP 8+ απαιτεί Java 17+ για μεταγλώττιση. packaging διαχειρίζεται τη συμπερίληψη αρχείων από βιβλιοθήκες: exclude, merge, pickFirst για επίλυση συγκρούσεων META-INF. buildFeatures ενεργοποιεί/απενεργοποιεί τα ViewBinding, DataBinding, Compose. aaptOptions διαμορφώνει την επεξεργασία πόρων: ignoreAssetsPattern, cruncherEnabled. Κάθε στοιχείο του μπλοκ android βελτιστοποιεί μια συγκεκριμένη πτυχή της δόμησης.

kotlin
android {
    namespace = "com.example.myapp"
    compileSdk = 35
    buildToolsVersion = "35.0.0"

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 26
        targetSdk = 35
        versionCode = 5
        versionName = "2.3.1"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        getByName("debug") { isDebuggable = true }
        getByName("release") {
            isMinifyEnabled = true
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"))
        }
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }

    buildFeatures {
        viewBinding = true
        compose = true
    }
}

Διαχείριση εξαρτήσεων

BOM (Bill of Materials)

Εξαρτήσεις στο build.gradle είναι οι βιβλιοθήκες και τα module που συνδέονται στο έργο. Το μπλοκ dependencies βρίσκεται στο ίδιο επίπεδο με το μπλοκ android. Το Gradle υποστηρίζει διάφορες διαμορφώσεις: implementation (βιβλιοθήκη διαθέσιμη σε αυτό το module, μη μεταβατική), api (βιβλιοθήκη μεταβατικά διαθέσιμη σε εξαρτώμενα module), compileOnly (μόνο για μεταγλώττιση, δεν περιλαμβάνεται στο APK), runtimeOnly (μόνο σε χρόνο εκτέλεσης), annotationProcessor / ksp (επεξεργαστές σχολιασμών), testImplementation (μόνο για δοκιμές), androidTestImplementation (μόνο για ενόργανες δοκιμές).

Από το AGP 8.0, Non-Transitive R classes — κάθε βιβλιοθήκη έχει τη δική της κλάση R, αποτρέποντας συγκρούσεις πόρων. Στο μπλοκ dependencies είναι σημαντικό να χρησιμοποιείτε σωστές διαμορφώσεις: το implementation δεν αποκαλύπτει μεταβατικές εξαρτήσεις, επιταχύνοντας τη δόμηση. Το api αποκαλύπτει — χρησιμοποιείται όταν η βιβλιοθήκη εξάγει τύπους από άλλη βιβλιοθήκη (π.χ., το Retrofit χρησιμοποιεί τύπους OkHttp στο δημόσιο API του).

Για τη διαχείριση εκδόσεων συνιστάται η χρήση BOM (Bill of Materials) — ενός αρχείου δόμησης που καθορίζει συμβατές εκδόσεις βιβλιοθηκών. Firebase BOM: implementation(platform("com.google.firebase:firebase-bom:33.0.0")). Μετά τη σύνδεση BOM, μπορεί να καθοριστεί μόνο το όνομα βιβλιοθήκης χωρίς έκδοση — το BOM θα επιλέξει αυτόματα τη συμβατή έκδοση. Αυτό εξαλείφει συγκρούσεις μεταξύ μεταβατικών εξαρτήσεων διαφορετικών βιβλιοθηκών. Το BOM είναι διαθέσιμο για Firebase, Compose, Kotlin, Ktor, AndroidX.

kotlin
dependencies {
    // BOM — διαχείριση εκδόσεων
    implementation(platform("androidx.compose:compose-bom:2024.12.01"))
    implementation(platform("com.google.firebase:firebase-bom:33.0.0"))

    // AndroidX και Compose
    implementation("androidx.core:core-ktx")
    implementation("androidx.lifecycle:lifecycle-runtime-ktx")
    implementation("androidx.activity:activity-compose")
    implementation("androidx.compose.ui:ui")

    // Network
    implementation("com.squareup.retrofit2:retrofit:2.11.0")
    implementation("com.squareup.okhttp3:okhttp:4.12.0")

    // Firebase (εκδόσεις από BOM)
    implementation("com.google.firebase:firebase-firestore")
    implementation("com.google.firebase:firebase-crashlytics")

    // Δοκιμές
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.2.1")
}

build.gradle σε πολυαρθρωτικά έργα

Σε πολυαρθρωτικά έργα, κάθε module έχει το δικό του build.gradle. Για τη σύνδεση ενός module με ένα άλλο, χρησιμοποιείται η σύνταξη implementation(project(":module-name")). Το Gradle δημιουργεί αυτόματα το module αν η διαμόρφωσή του έχει αλλάξει. Η πολυαρθρωτική αρχιτεκτονική βελτιώνει τον χρόνο δόμησης (σταδιακή δόμηση, παραλληλισμός) και διαχωρίζει την ευθύνη μεταξύ module λειτουργιών, βασικών module και βιβλιοθηκών.

Το βασικό πρόβλημα των πολυαρθρωτικών έργων — διπλασιασμός διαμόρφωσης. Αν 10 module έχουν τα ίδια minSdk, compileSdk και εξαρτήσεις Compose, αυτό σημαίνει 10 αντίγραφα σε διαφορετικά build.gradle. Η λύση — Convention Plugins (πρώην buildSrc). Το Convention Plugin είναι ένα πρόσθετο Gradle γραμμένο σε Kotlin που εφαρμόζεται σε module: plugins { id("myapp.android.library") }. Το πρόσθετο περιέχει κοινή διαμόρφωση και οι αλλαγές εφαρμόζονται άμεσα σε όλα τα module.

Για την οργάνωση Convention Plugins χρησιμοποιείται ο κατάλογος build-logic/ στη ρίζα του έργου. Περιέχει includeBuild στο settings.gradle και πρόσθετα Kotlin. Τα Convention Plugins μπορούν να δημοσιευτούν σε αποθετήριο maven για επαναχρησιμοποίηση μεταξύ έργων. Η Google συνιστά τα Convention Plugins ως πρότυπο για πολυαρθρωτικά έργο, αντικαθιστώντας τα subprojects { } και apply from. Η μετάβαση σε Convention Plugins μειώνει το build.gradle του module σε 10-15 γραμμές.

kotlin
// build-logic/src/main/kotlin/AndroidLibraryConventionPlugin.kt
class AndroidLibraryConventionPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            with(plugins) {
                apply("com.android.library")
                apply("org.jetbrains.kotlin.android")
            }
            extensions.configure<CommonExtension<*, *, *, *>> {
                compileSdk = 35
                defaultConfig { minSdk = 26 }
                compileOptions {
                    sourceCompatibility = JavaVersion.VERSION_17
                    targetCompatibility = JavaVersion.VERSION_17
                }
            }
        }
    }
}

// module/build.gradle.kts — μετά το Convention Plugin
plugins {
    id("myapp.android.library")
}

dependencies {
    implementation(project(":core:network"))
}

Συχνές ερωτήσεις

Ποια γλώσσα να επιλέξω για build.gradle το 2025;

Kotlin DSL (.gradle.kts) — η επίσημη σύσταση της Google. Η στατική τυποποίηση αποτρέπει σφάλματα, το IDE παρέχει αυτόματη συμπλήρωση. Το Groovy (.gradle) υποστηρίζεται, αλλά οι νέες λειτουργίες Gradle και AGP δοκιμάζονται πρώτα στο Kotlin DSL.

Γιατί χρειάζεται το namespace στο build.gradle;

namespace καθορίζει το πακέτο για τις παραγόμενες κλάσεις (R.java, BuildConfig). Προηγουμένως, το namespace καθοριζόταν στο AndroidManifest.xml. Από το AGP 7+, το namespace καθορίζεται μόνο στο build.gradle. Η τιμή πρέπει να συμπίπτει με το applicationId (ή να διαφέρει αν χρησιμοποιείται applicationIdSuffix).

Πώς να επιταχύνω τη δόμηση Gradle;

Ενεργοποιήστε το Gradle Configuration Cache (org.gradle.configuration-cache=true), χρησιμοποιήστε το Build Cache (org.gradle.caching=true), μεταβείτε σε KSP αντί kapt, χωρίστε το πολυαρθρωτικό έργο και χρησιμοποιήστε Convention Plugins. Επίσης, απενεργοποιήστε τα περιττά product flavors: στη δόμηση διαφθοράς δημιουργήστε μόνο ένα flavor.

Ποια είναι η διαφορά μεταξύ implementation και api;

implementation: η εξάρτηση είναι ορατή μόνο εντός του module. Τα εξαρτώμενα module δεν έχουν πρόσβαση σε μεταβατικές κλάσεις. api: η εξάρτηση αποκαλύπτεται προς τα έξω. Χρησιμοποιήστε api όταν τύποι από την εξάρτηση χρησιμοποιούνται στο δημόσιο API του module (π.χ., το Retrofit εξάγει τύπους OkHttp). Το implementation επιταχύνει τη δόμηση — το Gradle δεν αναδομεί τα εξαρτώμενα module όταν αλλάζει η εξάρτηση implementation.

Μπορεί να χρησιμοποιηθεί το build.gradle για iOS;

Το build.gradle είναι ένα αρχείο ειδικό για Android. Για iOS χρησιμοποιείται Xcode project (.xcodeproj) και Swift Package Manager (Package.swift). Ωστόσο, υπάρχουν εργαλεία πολλαπλών πλατφορμών (Kotlin Multiplatform, Flutter, React Native) όπου το build.gradle χρησιμοποιείται για τη δόμηση του τμήματος Android. Στο KMP, το build.gradle διαμορφώνει τον στόχο Android.

Σύνοψη

  • build.gradle — το κεντρικό αρχείο δόμησης του έργου Android που διαχειρίζεται πρόσθετα, εξαρτήσεις και διαμόρφωση.
  • Project-level καθορίζει κοινά πρόσθετα και αποθετήρια· module-level περιέχει μπλοκ android και εξαρτήσεις module.
  • Kotlin DSL — η συνιστώμενη σύνταξη για νέα έργα λόγω στατικής τυποποίησης.
  • Μπλοκ android διαμορφώνει compileSdk, defaultConfig, buildTypes, productFlavors και sourceSets.
  • Dependencies χρησιμοποιούν implementation (κρυφές) και api (δημόσιες)· το BOM διαχειρίζεται εκδόσεις μεταβατικά.
  • Πολυαρθρωτικά έργα εφαρμόζουν Convention Plugins για εξάλειψη διπλασιασμού διαμόρφωσης.
  • Σύσταση: μεταβείτε σε Kotlin DSL, Version Catalogs και Convention Plugins για καθαρότητα και ταχύτητα δόμησης.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης