Build konfigurieren

Das Android-Build-System kompiliert App-Ressourcen und Quellcode und verpackt sie in APKs oder Android App Bundles, die du testen, bereitstellen, signieren und verteilen kannst.

Android Studio verwendet Gradle, ein erweitertes Build-Toolkit, um den Build-Prozess zu automatisieren und zu verwalten und gleichzeitig flexible, benutzerdefinierte Build-Konfigurationen zu definieren. Jede Build-Konfiguration kann einen eigenen Code und eigene Ressourcen definieren und dabei die Teile wiederverwenden, die für alle Versionen Ihrer App gelten. Das Android-Gradle-Plug-in arbeitet mit dem Build-Toolkit zusammen, um Prozesse und konfigurierbare Einstellungen für das Erstellen und Testen von Android-Apps bereitzustellen.

Gradle und das Android-Gradle-Plug-in werden unabhängig von Android Studio ausgeführt. Das bedeutet, dass Sie Ihre Android-Apps in Android Studio, über die Befehlszeile auf Ihrem Computer oder auf Computern erstellen können, auf denen Android Studio nicht installiert ist, z. B. Continuous-Integration-Server.

Wenn Sie Android Studio nicht verwenden, können Sie Ihre App über die Befehlszeile erstellen und ausführen. Die Ausgabe des Builds ist unabhängig davon, ob Sie ein Projekt über die Befehlszeile, auf einem Remote-Computer oder mit Android Studio erstellen.

Hinweis:Da Gradle und das Android-Gradle-Plug-in unabhängig von Android Studio ausgeführt werden, müssen Sie die Build-Tools separat aktualisieren. In den Versionshinweisen erfahren Sie, wie Sie Gradle und das Android-Gradle-Plug-in aktualisieren.

Dank der Flexibilität des Android-Build-Systems können Sie benutzerdefinierte Build-Konfigurationen erstellen, ohne die zentralen Quelldateien Ihrer App zu ändern. Auf dieser Seite wird erklärt, wie das Android-Build-System funktioniert und wie du damit mehrere Build-Konfigurationen anpassen und automatisieren kannst. Weitere Informationen zum Bereitstellen Ihrer App finden Sie unter App erstellen und ausführen. Wie Sie benutzerdefinierte Build-Konfigurationen mit Android Studio sofort erstellen, erfahren Sie unter Build-Varianten konfigurieren.

Der Build-Prozess

Der Build-Prozess umfasst viele Tools und Prozesse, die Ihr Projekt in ein Android Application Package (APK) oder Android App Bundle (AAB) konvertieren.

Ein Großteil des Build-Prozesses wird vom Android-Gradle-Plug-in übernommen. Es kann jedoch hilfreich sein, bestimmte Aspekte des Build-Prozesses zu verstehen, damit Sie den Build an Ihre Anforderungen anpassen können.

Unterschiedliche Projekte können unterschiedliche Build-Ziele haben. Beispielsweise werden mit dem Build für eine Bibliothek eines Drittanbieters Bibliotheken für Android Archive (AAR) oder Java Archive (JAR) erstellt. Eine Anwendung ist jedoch der häufigste Projekttyp. Der Build für ein Anwendungsprojekt erzeugt ein Debug- oder Release-APK oder AAB Ihrer Anwendung, das Sie für externe Nutzer bereitstellen, testen oder freigeben können.

Diese Seite konzentriert sich auf die Anwendungsentwicklung, aber viele der Build-Schritte und -Konzepte sind bei den meisten Build-Typen üblich.

Android-Build-Glossar

Mit Gradle und dem Android-Gradle-Plug-in können Sie die folgenden Aspekte Ihres Builds konfigurieren:

Build-Typen

Build-Typen definieren bestimmte Attribute, die Gradle beim Erstellen und Packen Ihrer App verwendet. Build-Typen werden in der Regel für verschiedene Phasen des Entwicklungslebenszyklus konfiguriert.

Der Build-Typ „Debug“ aktiviert beispielsweise Fehlerbehebungsoptionen und signiert die App mit dem Fehlerbehebungsschlüssel, während der Build-Typ des Release Ihre App für die Verteilung verkleinern, verschleiern und mit einem Releaseschlüssel signieren kann.

Du musst mindestens einen Build-Typ definieren, um deine App zu erstellen. In Android Studio werden die Build-Typen für die Fehlerbehebung und den Release standardmäßig erstellt. Informationen zum Anpassen der Paketeinstellungen für Ihre Anwendung finden Sie unter Build-Typen konfigurieren.

Produktaromen
Die Produktvarianten repräsentieren verschiedene Versionen deiner App, die du für Nutzer veröffentlichen kannst, z. B. kostenlose und kostenpflichtige Versionen. Sie können Produktvarianten so anpassen, dass sie unterschiedlichen Code und andere Ressourcen verwenden. Gleichzeitig können Sie die Teile, die in allen Versionen Ihrer App verwendet werden, gemeinsam nutzen und wiederverwenden. Produktvarianten sind optional und müssen manuell erstellt werden. Hier erfährst du, wie du Produktvarianten konfigurieren, um verschiedene Versionen deiner App zu erstellen.
Varianten erstellen
Eine Build-Variante ist eine produktübergreifende Build-Typ- und Produkt-Flavor und die Konfiguration, mit der Gradle Ihre App erstellt. Mit Build-Varianten können Sie die Debug-Version Ihrer Produktvarianten während der Entwicklung und signierte Releaseversionen Ihrer Produktvarianten für den Vertrieb erstellen. Obwohl Sie Build-Varianten nicht direkt konfigurieren, konfigurieren Sie die Build-Typen und Produktvarianten, aus denen sie bestehen. Wenn Sie zusätzliche Build-Typen oder Produktvarianten erstellen, werden auch zusätzliche Build-Varianten erstellt. Informationen zum Erstellen und Verwalten von Build-Varianten finden Sie in der Übersicht unter Build-Varianten konfigurieren.
Manifesteinträge
Sie können in der Konfiguration der Build-Variante Werte für einige Attribute der Manifestdatei angeben. Diese Build-Werte überschreiben die vorhandenen Werte in der Manifestdatei. Dies 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, führt das Tool für die Manifestzusammenführung die Manifesteinstellungen zusammen.
Abhängigkeiten
Das Build-System verwaltet Projektabhängigkeiten von Ihrem lokalen Dateisystem und von Remote-Repositories. Das bedeutet, dass Sie die Binärpakete der Abhängigkeiten nicht manuell suchen, herunterladen und in Ihr Projektverzeichnis kopieren müssen. Weitere Informationen finden Sie unter Build-Abhängigkeiten hinzufügen.
Unterschreiben
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 unter Verwendung bekannter Anmeldedaten, um eine Passwortabfrage bei der Build-Erstellung zu vermeiden. Das Build-System signiert die Release-Version nur, wenn Sie explizit eine Signaturkonfiguration für diesen Build definieren. Wenn du keinen Releaseschlüssel hast, kannst du einen generieren, wie unter App signieren beschrieben. Signierte Release-Builds sind für den Vertrieb von Apps über die meisten App-Shops erforderlich.
Verkleinerung von Code und Ressourcen
Im Build-System können Sie für jede Build-Variante eine andere ProGuard-Regeldatei angeben. Beim Erstellen der Anwendung wendet das Build-System die entsprechenden Regeln zum Verkleinern des Codes und der Ressourcen mit den integrierten Tools zum Schrumpfen an, z. B. R8. Wenn Sie den Code und die Ressourcen verkleinern, können Sie die APK- oder AAB-Größe verringern.
Unterstützung mehrerer APKs
Mit dem Build-System kannst du automatisch verschiedene APKs erstellen, die jeweils nur den Code und die Ressourcen enthalten, die für eine bestimmte Bildschirmdichte oder ein Application Binary Interface (ABI) erforderlich sind. Weitere Informationen findest du unter Mehrere APKs erstellen. Die Veröffentlichung eines einzelnen AAB ist jedoch der empfohlene Ansatz, da es neben Bildschirmdichte und ABI eine Aufteilung nach Sprache ermöglicht und dabei nicht mehrere Artefakte bei Google Play hochgeladen werden müssen. Alle neuen Anwendungen, 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 beidem 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. Diese Nur-Text-Dateien verwenden Domain Specific Language (DSL), um die Build-Logik mithilfe eines Kotlin-Skripts zu beschreiben und zu bearbeiten. Dies ist eine Variante der Kotlin-Sprache. Sie können auch Groovy verwenden, eine dynamische Sprache für die Java Virtual Machine (JVM), um Ihre Builds zu konfigurieren.

Sie benötigen weder Kotlin-Script noch Groovy, um mit der Konfiguration Ihres Builds zu beginnen, da das Android-Gradle-Plug-in die meisten der benötigten DSL-Elemente enthält. Weitere Informationen zum Android-Gradle-Plug-in DSL finden Sie in der DSL-Referenzdokumentation. Das Kotlin-Skript basiert außerdem auf dem 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 basierend auf sinnvollen Standardwerten aus. Die Projektdateistruktur hat das folgende Layout:

└── MyApp/  # Project
    ├── gradle/
    │   └── wrapper/
    │       └── gradle-wrapper.properties
    ├── build.gradle(.kts)
    ├── settings.gradle(.kts)
    └── app/  # Module
        ├── build.gradle(.kts)
        └── build/
            ├── libs/
            └── src/
                └── main/  # Source set
                    ├── java/
                    │   └── com.example.myapp
                    ├── res/
                    │   ├── drawable/
                    │   ├── values/
                    │   └── ...
                    └── AndroidManifest.xml

Es gibt einige Gradle-Build-Konfigurationsdateien, die Teil der Standard-Projektstruktur für eine Android-App sind. Bevor Sie mit der Konfiguration Ihres Builds beginnen können, müssen Sie den Umfang und Zweck der einzelnen Dateien sowie die grundlegenden DSL-Elemente kennen, die sie definieren.

Gradle-Wrapper-Datei

Der Gradle-Wrapper (gradlew) ist eine kleine Anwendung, die in Ihrem Quellcode enthalten ist und mit der Gradle heruntergeladen und gestartet wird. 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 das Attribut distributionUrl, das beschreibt, mit welcher Version von Gradle Ihr Build ausgeführt 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-Einstellungsdatei

Die Datei settings.gradle.kts (für Kotlin-DSL) oder settings.gradle (für Groovy DSL) befindet sich im Stammverzeichnis des Projekts. In dieser Datei mit den Einstellungen sind die Repository-Einstellungen auf Projektebene definiert. Außerdem wird Gradle mitgeteilt, welche Module beim Erstellen Ihrer App enthalten sein sollen. In 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. The code below
      * defines 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")

Groovig

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. The code below
      * defines 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'

Build-Datei der obersten Ebene

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

Im folgenden Codebeispiel werden die Standardeinstellungen und DSL-Elemente im Build-Skript der obersten Ebene beschrieben, nachdem ein neues Projekt erstellt wurde:

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.3.0" apply false
    id("com.android.library") version "8.3.0" apply false
    id("org.jetbrains.kotlin.android") version "1.9.23" apply false
}

Groovig

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.3.0' apply false
    id 'com.android.library' version '8.3.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.9.23' apply false
}