Build konfigurieren

Das Android-Build-System kompiliert App-Ressourcen und Quellcode und verpackt sie in APKs oder Android App Bundles, die Sie testen, bereitstellen, signieren und verteilen können.

In den Artikeln Gradle-Build – Übersicht und Android-Build-Struktur haben wir die Build-Konzepte und die Struktur einer Android-App besprochen. Jetzt ist es an der Zeit, den Build zu konfigurieren.

Glossar zu Android-Builds

Mit Gradle und dem Android-Gradle-Plug-in kannst du die folgenden Aspekte deines Builds konfigurieren:

Build-Typen

Buildtypen definieren bestimmte Eigenschaften, die Gradle beim Erstellen und Verpacken Ihrer App verwendet. Buildtypen werden in der Regel für verschiedene Phasen des Entwicklungszyklus konfiguriert.

Beim Debug-Buildtyp werden beispielsweise Debug-Optionen aktiviert und die App mit dem Debug-Schlüssel signiert. Beim Release-Buildtyp kann die App für den Vertrieb verkleinert, verschleiert und mit einem Release-Schlüssel signiert werden.

Sie müssen mindestens einen Build-Typ definieren, um Ihre App zu erstellen. In Android Studio werden die Build-Typen für die Fehlerbehebung und den Release standardmäßig erstellt. Wenn Sie die Verpackungseinstellungen für Ihre App anpassen möchten, erfahren Sie hier, wie Sie Buildtypen konfigurieren.

Produktvarianten
Produktvarianten stellen verschiedene Versionen Ihrer App dar, die Sie Nutzern anbieten können, z. B. kostenlose und kostenpflichtige Versionen. Sie können Produktvarianten anpassen, um anderen Code und andere Ressourcen zu verwenden, während Sie die Teile, die für alle Versionen Ihrer App gemeinsam sind, teilen und wiederverwenden. Produktvarianten sind optional und müssen manuell erstellt werden. Wenn Sie verschiedene Versionen Ihrer App erstellen möchten, erfahren Sie hier, wie Sie Produktvarianten konfigurieren.
Build-Varianten
Eine Buildvariante ist ein produktübergreifender Buildtyp und eine Produktvariante und ist die Konfiguration, die Gradle zum Erstellen Ihrer App verwendet. Mit Buildvarianten können Sie während der Entwicklung die Debugversion Ihrer Produktvarianten und signierte Releaseversionen Ihrer Produktvarianten für den Vertrieb erstellen. Sie konfigurieren Build-Varianten zwar nicht direkt, aber die Build-Typen und Produktvarianten, aus denen sie bestehen. Wenn Sie zusätzliche Buildtypen oder Produktvarianten erstellen, werden auch zusätzliche Buildvarianten erstellt. Weitere Informationen zum Erstellen und Verwalten von Build-Varianten finden Sie unter Build-Varianten konfigurieren.
Manifesteinträge
Sie können Werte für einige Eigenschaften der Manifestdatei in der Buildvariantenkonfiguration angeben. Diese Build-Werte überschreiben die vorhandenen Werte in der Manifestdatei. Das ist nützlich, wenn Sie mehrere Varianten Ihrer App mit einem anderen Anwendungsnamen, einer anderen SDK-Mindestversion oder einer anderen SDK-Zielversion generieren möchten. Wenn mehrere Manifeste vorhanden sind, werden mit dem Tool zum Zusammenführen von Manifesten Manifesteinstellungen zusammengeführt.
Abhängigkeiten
Das Build-System verwaltet Projektabhängigkeiten von Ihrem lokalen Dateisystem und aus Remote-Repositories. Sie müssen also nicht manuell nach Binärpaketen Ihrer Abhängigkeiten suchen, sie herunterladen und in Ihr Projektverzeichnis kopieren. Weitere Informationen finden Sie unter Build-Abhängigkeiten hinzufügen.
Unterzeichnung
Mit dem Build-System können Sie Signatureinstellungen in der Build-Konfiguration festlegen und Ihre Anwendung während des Build-Prozesses automatisch signieren. Das Build-System signiert die Debug-Version mit einem Standardschlüssel und einem Standardzertifikat. Dabei werden bekannte Anmeldedaten verwendet, um zu verhindern, dass beim Erstellen ein Passwort abgefragt wird. Das Build-System signiert die Release-Version nur, wenn Sie explizit eine Signaturkonfiguration für diesen Build definieren. Wenn Sie keinen Releaseschlüssel haben, können Sie wie unter App signieren beschrieben einen erstellen. Signierte Release-Builds sind für den Vertrieb von Apps über die meisten App-Shops erforderlich.
Code- und Ressourcenkomprimierung
Im Build-System können Sie für jede Build-Variante eine eigene ProGuard-Regeldatei angeben. Beim Erstellen Ihrer App wendet das Build-System die entsprechenden Regeln an, um mithilfe der integrierten Komprimierungstools wie R8 Ihren Code und Ihre Ressourcen zu komprimieren. Wenn Sie Ihren Code und Ihre Ressourcen verkleinern, können Sie die Größe Ihres APK oder AAB verringern.
Unterstützung für mehrere APKs
Mit dem Build-System können Sie automatisch verschiedene APKs erstellen, die jeweils nur den Code und die Ressourcen enthalten, die für eine bestimmte Bildschirmdichte oder Application Binary Interface (ABI) erforderlich sind. Weitere Informationen finden Sie unter Mehrere APKs erstellen. Wir empfehlen jedoch, ein einzelnes AAB zu veröffentlichen, da es neben der Bildschirmdichte und dem ABI auch eine Aufteilung nach Sprache bietet und Sie nicht mehrere Artefakte bei Google Play hochladen müssen. Alle neuen Apps, die nach August 2021 eingereicht werden, müssen AABs verwenden.

Java-Versionen in Android-Builds

Unabhängig davon, ob Ihr Quellcode in Java, Kotlin oder in beiden Sprachen geschrieben ist, müssen Sie an mehreren Stellen eine JDK- oder Java-Sprachversion für Ihren Build auswählen. Weitere Informationen finden Sie unter Java-Versionen in Android-Builds.

Build-Konfigurationsdateien

Wenn Sie benutzerdefinierte Build-Konfigurationen erstellen möchten, müssen Sie Änderungen an einer oder mehreren Build-Konfigurationsdateien vornehmen. In diesen Textdateien wird die Buildlogik mithilfe einer domänenspezifischen Sprache (DSL) in Kotlin-Script beschrieben und manipuliert. Kotlin-Script ist eine Variante der Kotlin-Programmiersprache. Sie können Ihre Builds auch mit Groovy konfigurieren, einer dynamischen Sprache für die Java Virtual Machine (JVM).

Sie müssen kein Kotlin-Skript oder Groovy kennen, um Ihren Build zu konfigurieren, da das Android-Gradle-Plug-in die meisten der benötigten DSL-Elemente einführt. Weitere Informationen zum Android-Gradle-Plug-in DSL finden Sie in der DSL-Referenzdokumentation. Kotlin-Scripts basieren auch auf der zugrunde liegenden Gradle Kotlin DSL.

Wenn Sie ein neues Projekt starten, erstellt Android Studio automatisch einige dieser Dateien für Sie und füllt sie mit sinnvollen Standardwerten aus. Eine Übersicht über die erstellten Dateien finden Sie unter Android-Build-Struktur.

Gradle-Wrapper-Datei

Der Gradle-Wrapper (gradlew) ist eine kleine Anwendung, die im Quellcode enthalten ist und Gradle selbst herunterlädt und startet. Dies sorgt für eine einheitlichere Build-Ausführung. Entwickler laden die Anwendungsquelle herunter und führen gradlew aus. Dadurch wird die erforderliche Gradle-Distribution heruntergeladen und Gradle gestartet, um Ihre Anwendung zu erstellen.

Die Datei gradle/wrapper/gradle-wrapper.properties enthält die Property distributionUrl, die beschreibt, welche Version von Gradle zum Ausführen des Builds verwendet wird.

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

Gradle-Einstellungen

Die Datei settings.gradle.kts (für die Kotlin-DSL) oder settings.gradle (für die Groovy-DSL) befindet sich im Stammverzeichnis des Projekts. In dieser Datei werden Repository-Einstellungen auf Projektebene definiert und Gradle wird mitgeteilt, welche Module beim Erstellen Ihrer App eingeschlossen werden sollen. Bei Projekten mit mehreren Modulen muss jedes Modul angegeben werden, das in den endgültigen Build aufgenommen werden soll.

Bei den meisten Projekten sieht die Datei standardmäßig so aus:

Kotlin

pluginManagement {

    /**
      * The pluginManagement.repositories block configures the
      * repositories Gradle uses to search or download the Gradle plugins and
      * their transitive dependencies. Gradle pre-configures support for remote
      * repositories such as JCenter, Maven Central, and Ivy. You can also use
      * local repositories or define your own remote repositories. Here we
      * define the Gradle Plugin Portal, Google's Maven repository,
      * and the Maven Central Repository as the repositories Gradle should use to look for its
      * dependencies.
      */

    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {

    /**
      * The dependencyResolutionManagement.repositories
      * block is where you configure the repositories and dependencies used by
      * all modules in your project, such as libraries that you are using to
      * create your application. However, you should configure module-specific
      * dependencies in each module-level build.gradle file. For new projects,
      * Android Studio includes Google's Maven repository and the Maven Central
      * Repository by default, but it does not configure any dependencies (unless
      * you select a template that requires some).
      */

  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
      google()
      mavenCentral()
  }
}
rootProject.name = "My Application"
include(":app")

Groovy

pluginManagement {

    /**
      * The pluginManagement.repositories block configures the
      * repositories Gradle uses to search or download the Gradle plugins and
      * their transitive dependencies. Gradle pre-configures support for remote
      * repositories such as JCenter, Maven Central, and Ivy. You can also use
      * local repositories or define your own remote repositories. Here we
      * define the Gradle Plugin Portal, Google's Maven repository,
      * and the Maven Central Repository as the repositories Gradle should use to look for its
      * dependencies.
      */

    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {

    /**
      * The dependencyResolutionManagement.repositories
      * block is where you configure the repositories and dependencies used by
      * all modules in your project, such as libraries that you are using to
      * create your application. However, you should configure module-specific
      * dependencies in each module-level build.gradle file. For new projects,
      * Android Studio includes Google's Maven repository and the Maven Central
      * Repository by default, but it does not configure any dependencies (unless
      * you select a template that requires some).
      */

    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
rootProject.name = "My Application"
include ':app'

Die Build-Datei auf oberster Ebene

Die Datei build.gradle.kts (für die Kotlin-DSL) oder build.gradle (für die Groovy-DSL) der obersten Ebene befindet sich im Stammverzeichnis des Projekts. In der Regel werden die gängigen Plug-in-Versionen definiert, die von Modulen in Ihrem Projekt verwendet werden.

Im folgenden Codebeispiel werden die Standardeinstellungen und DSL-Elemente im übergeordneten Build-Script nach dem Erstellen eines neuen Projekts beschrieben:

Kotlin

plugins {

    /**
     * Use `apply false` in the top-level build.gradle file to add a Gradle
     * plugin as a build dependency but not apply it to the current (root)
     * project. Don't use `apply false` in sub-projects. For more information,
     * see Applying external plugins with same version to subprojects.
     */

    id("com.android.application") version "8.7.0" apply false
    id("com.android.library") version "8.7.0" apply false
    id("org.jetbrains.kotlin.android") version "2.0.20" apply false
}

Groovy

plugins {

    /**
     * Use `apply false` in the top-level build.gradle file to add a Gradle
     * plugin as a build dependency but not apply it to the current (root)
     * project. Don't use `apply false` in sub-projects. For more information,
     * see Applying external plugins with same version to subprojects.
     */

    id 'com.android.application' version '8.7.0' apply false
    id 'com.android.library' version '8.7.0' apply false
    id 'org.jetbrains.kotlin.android' version '2.0.20' apply false
}