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
| Konfigurationselement | Beschreibung |
|---|---|
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. |
allprojects | Konfiguriert die Repository-Adressen einheitlich für alle Module (einschließlich Untermodulen). |
task clean | Definiert eine Clean-Aufgabe, die beim Ausführen das gesamte build-Verzeichnis des Projekts löscht. |
Die äußere
build.gradlemuss 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)
| Wert | Bedeutung |
|---|---|
com.android.application | Anwendungsmodul, kann direkt ausgeführt werden. |
com.android.library | Bibliotheksmodul, 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)
| Konfiguration | Beschreibung |
|---|---|
compileSdkVersion | Gibt an, welche Android-SDK-Version zum Kompilieren des Projekts verwendet wird. 27 entspricht Android 8.1. |
buildToolsVersion | Versionsnummer 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)
| Eigenschaft | Beschreibung |
|---|---|
applicationId | Der eindeutige Paketname der App, entspricht der eindeutigen Kennung (z. B. für Google Play). |
minSdkVersion | Mindestens unterstützte Android-Version; 14 entspricht Android 4.0. |
targetSdkVersion | Gibt an, dass das Projekt auf dieser Version ausreichend getestet wurde. Das System aktiviert daraufhin versionsspezifische Funktionen (z. B. Mehrfenstermodus unter 7.0). |
versionCode | Versionsnummer, eine Ganzzahl, die von App-Stores zur Bestimmung von Updates verwendet wird. |
versionName | Versionsname, eine Zeichenfolge, die für Benutzer sichtbar ist. |
testInstrumentationRunner | Gibt 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)
| Konfiguration | Beschreibung |
|---|---|
debug | Konfiguration für Debug-Builds (kann weggelassen werden, hat Standardwerte). |
release | Konfiguration für Release-Builds. |
minifyEnabled | Legt fest, ob Code-Obfuskation aktiviert wird. false = keine Obfuskation, true = Obfuskation. |
proguardFiles | Gibt 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
| Typ | Beschreibung | Beispiel |
|---|---|---|
| Lokale Abhängigkeit | Hängt von lokalen jar-Dateien oder Verzeichnissen ab | compile fileTree(dir: 'libs', include: ['*.jar']) |
| Bibliotheksabhängigkeit | Hängt von einem Bibliotheksmodul im Projekt ab | compile project(':library') |
| Remote-Abhängigkeit | Hängt von Open-Source-Bibliotheken in JCenter/Google-Repositorys ab | compile '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
| Datei | Rolle | Änderungshäufigkeit |
|---|---|---|
Äußere build.gradle | Globale Repository-Konfiguration, Gradle-Plugin-Version | Selten geändert |
Innere app/build.gradle | Modul-Build-Konfiguration, Abhängigkeitsverwaltung | Häufig geändert |
| Kernkonfiguration | Wichtige Attribute | |
| ——— | ——— | |
apply plugin | Unterscheidung zwischen application / library | |
compileSdkVersion | Compile-SDK-Version | |
applicationId | Eindeutige App-Kennung | |
minSdkVersion | Mindestkompatible Version | |
targetSdkVersion | Zieltestversion | |
buildTypes | Debug- / Release-Build-Konfiguration | |
dependencies | Lokale / Remote- / Bibliotheksabhängigkeiten |
build.gradle