build.gradle

Die Rolle der build.gradle-Datei

I. Einführung in das Gradle-Build-System

Android Studio verwendet Gradle zum Erstellen von Projekten. Gradle ist ein sehr fortschrittliches Build-Tool, das eine auf Groovy basierende domänenspezifische Sprache (DSL) verwendet, um Projekteinstellungen zu deklarieren, anstatt herkömmlichem XML.

Ein HelloWorld-Projekt enthält zwei build.gradle-Dateien: eine äußere (Projektebene) und eine innere (Modulebene).


II. Äußere build.gradle (Projektebene)

Pfad: Projektstammverzeichnis/build.gradle

buildscript {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'

        // HINWEIS: Fügen Sie hier keine Anwendungsabhängigkeiten hinzu; diese gehören
        // in die einzelnen build.gradle-Dateien der Module
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}Code-Sprache: JavaScript (javascript)
Analyse der wichtigsten Konfigurationen
KonfigurationselementBeschreibung
jcenter()Deklariert die Verwendung des JCenter-Code-Hosting-Repositorys. Viele Open-Source-Android-Projekte werden auf JCenter gehostet; nach der Deklaration können diese direkt referenziert werden.
google()Deklariert die Verwendung des Google Maven-Repositorys, um Google-Bibliotheken wie Android Support Library und Constraint Layout zu erhalten.
classpath 'com.android.tools.build:gradle:3.1.2'Deklariert das Android-Plugin für Gradle. Gradle kann Java-, C++-Projekte usw. erstellen, für Android-Projekte wird jedoch dieses Plugin benötigt.
allprojectsKonfiguriert die Repository-Adressen einheitlich für alle Module (einschließlich Untermodulen).
task cleanDefiniert eine Clean-Aufgabe, die beim Ausführen das gesamte build-Verzeichnis des Projekts löscht.

Die äußere build.gradle muss im Grunde nicht geändert werden, es sei denn, Sie müssen globale Repositorys hinzufügen oder die Gradle-Plugin-Version aktualisieren.


III. Innere build.gradle (Modulebene / app-Verzeichnis)

Pfad: app/build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    buildToolsVersion "27.0.3"
    defaultConfig {
        applicationId "com.foxdevelop.www.myapplication"
        minSdkVersion 14
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:27.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}Code-Sprache: PHP (php)

Im Folgenden wird jeder Abschnitt einzeln erläutert.


IV. apply plugin — Plugin-Deklaration

apply plugin: 'com.android.application'Code-Sprache: JavaScript (javascript)
WertBedeutung
com.android.applicationAnwendungsmodul, kann direkt ausgeführt werden.
com.android.libraryBibliotheksmodul, kann nicht eigenständig ausgeführt werden und wird von anderen Modulen aufgerufen.

Dies ist die entscheidende Konfiguration, um zu unterscheiden, ob ein Modul eine „App“ oder eine „Library“ ist.


V. android-Block — Kern-Build-Konfiguration

1. Compile-Version und Build-Tools
compileSdkVersion 27
buildToolsVersion "27.0.3"Code-Sprache: CSS (css)
KonfigurationBeschreibung
compileSdkVersionGibt an, welche Android-SDK-Version zum Kompilieren des Projekts verwendet wird. 27 entspricht Android 8.1.
buildToolsVersionVersionsnummer der Build-Tools; Android Studio fordert zur Aktualisierung auf, wenn neue Versionen verfügbar sind.
2. defaultConfig — Standardkonfiguration
defaultConfig {
    applicationId "com.foxdevelop.www.myapplication"
    minSdkVersion 14
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}Code-Sprache: JavaScript (javascript)
EigenschaftBeschreibung
applicationIdDer eindeutige Paketname der App, entspricht der eindeutigen Kennung (z. B. für Google Play).
minSdkVersionMindestens unterstützte Android-Version; 14 entspricht Android 4.0.
targetSdkVersionGibt an, dass das Projekt auf dieser Version ausreichend getestet wurde. Das System aktiviert daraufhin versionsspezifische Funktionen (z. B. Mehrfenstermodus unter 7.0).
versionCodeVersionsnummer, eine Ganzzahl, die von App-Stores zur Bestimmung von Updates verwendet wird.
versionNameVersionsname, eine Zeichenfolge, die für Benutzer sichtbar ist.
testInstrumentationRunnerGibt den Runner für automatisierte Android-Tests an.
3. buildTypes — Build-Typen
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}Code-Sprache: JavaScript (javascript)
KonfigurationBeschreibung
debugKonfiguration für Debug-Builds (kann weggelassen werden, hat Standardwerte).
releaseKonfiguration für Release-Builds.
minifyEnabledLegt fest, ob Code-Obfuskation aktiviert wird. false = keine Obfuskation, true = Obfuskation.
proguardFilesGibt die Obfuskationsregeldateien an:
• Erste: Allgemeine Regeln aus dem SDK-Verzeichnis.
• Zweite: proguard-rules.pro, hier können projektspezifische Regeln definiert werden.

Standardmäßig führt Android Studio den Debug-Build aus; später wird erklärt, wie ein Release-Build erstellt wird.


VI. dependencies — Abhängigkeitsverwaltung

Dies ist der am häufigsten geänderte Teil, in dem alle Bibliotheken deklariert werden, von denen das Projekt abhängt.

Drei Arten von Abhängigkeiten
TypBeschreibungBeispiel
Lokale AbhängigkeitHängt von lokalen jar-Dateien oder Verzeichnissen abcompile fileTree(dir: 'libs', include: ['*.jar'])
BibliotheksabhängigkeitHängt von einem Bibliotheksmodul im Projekt abcompile project(':library')
Remote-AbhängigkeitHängt von Open-Source-Bibliotheken in JCenter/Google-Repositorys abcompile 'com.android.support:appcompat-v7:27.+'
Zeilenweise Analyse
// Lokale Abhängigkeit: Fügt alle .jar-Dateien im libs-Verzeichnis zum Build-Pfad hinzu
compile fileTree(dir: 'libs', include: ['*.jar'])Code-Sprache: PHP (php)
// Remote-Abhängigkeit: AppCompat-Kompatibilitätsbibliothek
// Format: Domäne:Gruppe:Version
compile 'com.android.support:appcompat-v7:27.+'Code-Sprache: JavaScript (javascript)
// Remote-Abhängigkeit: ConstraintLayout-Bibliothek
compile 'com.android.support.constraint:constraint-layout:1.0.2'Code-Sprache: JavaScript (javascript)
// Test-Abhängigkeit: JUnit für Unit-Tests
testCompile 'junit:junit:4.12'Code-Sprache: JavaScript (javascript)
// Android-Test-Abhängigkeit: Espresso für UI-Tests
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})Code-Sprache: JavaScript (javascript)

Workflow für Remote-Abhängigkeiten: Gradle prüft zuerst, ob die Bibliothek lokal zwischengespeichert ist → wenn ja, wird sie verwendet → wenn nicht, wird sie automatisch heruntergeladen → danach wird sie dem Build-Pfad hinzugefügt.


VII. Zusammenfassender Vergleich

DateiRolleÄnderungshäufigkeit
Äußere build.gradleGlobale Repository-Konfiguration, Gradle-Plugin-VersionSelten geändert
Innere app/build.gradleModul-Build-Konfiguration, AbhängigkeitsverwaltungHäufig geändert
KernkonfigurationWichtige Attribute
——————
apply pluginUnterscheidung zwischen application / library
compileSdkVersionCompile-SDK-Version
applicationIdEindeutige App-Kennung
minSdkVersionMindestkompatible Version
targetSdkVersionZieltestversion
buildTypesDebug- / Release-Build-Konfiguration
dependenciesLokale / Remote- / Bibliotheksabhängigkeiten

build.gradle

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert