Basismodul konfigurieren

Ein App-Bundle unterscheidet sich von einem APK insofern, als es nicht auf einem Gerät bereitgestellt werden kann. Es handelt sich vielmehr um ein Veröffentlichungsformat, das den gesamten kompilierten Code und die Ressourcen Ihrer App in einem einzigen Build-Artefakt enthält. Nachdem Sie Ihr signiertes App-Bundle hochgeladen haben, verfügt Google Play über alles, was erforderlich ist, um die APKs Ihrer App zu erstellen, zu signieren und für Nutzer bereitzustellen.

Erste Schritte

Bei den meisten App-Projekten ist die Unterstützung von Android App Bundles nicht allzu aufwendig. Das liegt daran, dass das Modul, das Code und Ressourcen für das Basis-APK Ihrer App enthält, das Standard-App-Modul ist, das Sie standardmäßig erhalten, wenn Sie ein neues App-Projekt in Android Studio erstellen. Das Modul, das das unten angegebene application-Plug-in auf die Datei build.gradle anwendet, stellt also den Code und die Ressourcen für die Basisfunktionen Ihrer App bereit.

Groovig

// The standard application plugin creates your app's base module.
plugins {
 id 'com.android.application'
}

Kotlin

plugins {
    // The standard application plugin creates your app's base module.
    id("com.android.application")
}

Das Basismodul stellt nicht nur die Hauptfunktion für Ihre Anwendung bereit, sondern auch viele der Build-Konfigurationen und Manifesteinträge, die sich auf das gesamte Anwendungsprojekt auswirken.

Build-Konfiguration des Basismoduls

Bei den meisten bestehenden App-Projekten müssen Sie die Build-Konfiguration des Basismoduls nicht ändern. Wenn Sie jedoch erwägen, Funktionsmodule zu Ihrem App-Projekt hinzuzufügen oder Ihre App zuvor mit mehreren APKs veröffentlicht haben, gibt es einige Aspekte der Build-Konfiguration des Basismoduls, die Sie beachten sollten.

Versionscode und App-Updates

Mit Android App Bundles musst du keine Versionscodes mehr für mehrere APKs verwalten, die du bei Google Play hochlädst. Stattdessen verwalten Sie nur einen Versionscode im Basismodul Ihrer App, wie unten dargestellt:

// In your base module build.gradle file
android {
    defaultConfig {
        …
        // You specify your app’s version code only in the base module.
        versionCode 5
        versionName "1.0"
    }
}

Nachdem Sie Ihr App Bundle hochgeladen haben, verwendet Google Play den Versionscode in Ihrem Basismodul, um allen APKs, die aus diesem Bundle generiert werden, denselben Versionscode zuzuweisen. Das heißt, wenn ein Gerät Ihre App herunterlädt und installiert, verwenden alle Split-APKs für diese App denselben Versionscode.

Wenn Sie Ihre App mit neuem Code oder neuen Ressourcen aktualisieren möchten, müssen Sie den Versionscode im Basismodul Ihrer App aktualisieren und ein neues, vollständiges App-Bundle erstellen. Wenn Sie dieses App-Bundle bei Google Play hochladen, wird ein neuer Satz von APKs generiert. Diese basieren auf dem Versionscode, den das Basismodul angibt. Wenn Nutzer Ihre App aktualisieren, stellt Google Play ihnen anschließend aktualisierte Versionen aller APKs bereit, die derzeit auf dem Gerät installiert sind. Das heißt, alle installierten APKs werden auf den neuen Versionscode aktualisiert.

Weitere Überlegungen

  • App-Signatur: Wenn Sie Signaturinformationen in Ihre Build-Dateien aufnehmen, sollten Sie diese nur in die Build-Konfigurationsdatei des Basismoduls aufnehmen. Weitere Informationen finden Sie unter Gradle für das Signieren Ihrer App konfigurieren.
  • Code-Verkleinerung:Wenn Sie die Code-Reduzierung für das gesamte App-Projekt (einschließlich der Feature-Module) aktivieren möchten, müssen Sie dies über die build.gradle-Datei des Basismoduls tun. Sie können also benutzerdefinierte ProGuard-Regeln in ein Featuremodul einbinden, das Attribut minifyEnabled in Build-Konfigurationen eines Featuremoduls wird jedoch ignoriert.
  • Der splits-Block wird ignoriert:Beim Erstellen eines App-Bundles ignoriert Gradle die Attribute im android.splits-Block. Wenn Sie festlegen möchten, welche Arten von Konfigurations-APKs von Ihrem App Bundle unterstützt werden, verwenden Sie stattdessen android.bundle, um Typen von Konfigurations-APKs zu deaktivieren.
  • App-Versionsverwaltung:Das Basismodul bestimmt den Versionscode und den Versionsnamen für Ihr gesamtes App-Projekt. Weitere Informationen findest du im Abschnitt zum Verwalten von App-Updates.

Typen von Konfigurations-APKs wieder aktivieren oder deaktivieren

Wenn Sie ein App-Bundle erstellen, unterstützt es standardmäßig das Generieren von Konfigurations-APKs für jeden Satz von Sprachressourcen, Bildschirmdichte-Ressourcen und ABI-Bibliotheken. Wenn Sie den android.bundle-Block in der Datei build.gradle Ihres Basismoduls wie unten gezeigt verwenden, können Sie die Unterstützung für einen oder mehrere Typen von Konfigurations-APKs deaktivieren:

Groovig

android {
    // When building Android App Bundles, the splits block is ignored.
    // You can remove it, unless you're going to continue to build multiple
    // APKs in parallel with the app bundle
    splits {...}

    // Instead, use the bundle block to control which types of configuration APKs
    // you want your app bundle to support.
    bundle {
        language {
            // This property is set to true by default.
            // You can specify `false` to turn off
            // generating configuration APKs for language resources.
            // These resources are instead packaged with each base and
            // feature APK.
            // Continue reading below to learn about situations when an app
            // might change setting to `false`, otherwise consider leaving
            // the default on for more optimized downloads.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = true
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }
}

Kotlin

android {
    // When building Android App Bundles, the splits block is ignored.
    // You can remove it, unless you're going to continue to build multiple
    // APKs in parallel with the app bundle
    splits {...}

    // Instead, use the bundle block to control which types of configuration APKs
    // you want your app bundle to support.
    bundle {
        language {
            // This property is set to true by default.
            // You can specify `false` to turn off
            // generating configuration APKs for language resources.
            // These resources are instead packaged with each base and
            // feature APK.
            // Continue reading below to learn about situations when an app
            // might change setting to `false`, otherwise consider leaving
            // the default on for more optimized downloads.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = true
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }
}

Umgang mit Sprachänderungen

Google Play bestimmt anhand der Sprachauswahl in den Geräteeinstellungen des Nutzers, welche Sprachressourcen mit der App installiert werden. Angenommen, ein Nutzer ändert seine Standardsystemsprache, nachdem er Ihre App bereits heruntergeladen hat. Wenn Ihre App diese Sprache unterstützt, fordert das Gerät zusätzliche Konfigurations-APKs für diese Sprachressourcen von Google Play an und lädt sie herunter.

Bei Anwendungen, die eine Sprachauswahl innerhalb der Anwendung bieten und die Sprache der Anwendung unabhängig von der Spracheinstellung auf Systemebene dynamisch ändern, müssen Sie einige Änderungen vornehmen, um Abstürze aufgrund fehlender Ressourcen zu vermeiden. Setzen Sie entweder das Attribut android.bundle.language.enableSplit auf false oder implementieren Sie On-Demand-Downloads in Sprachen mithilfe der Play Core-Bibliothek, wie unter Zusätzliche Sprachressourcen herunterladen beschrieben.