Das App-Bereitstellungsmodell von Google Play verwendet Android-Apps Sets zum Generieren und Bereitstellen optimierter APKs für die Gerätekonfiguration, sodass Nutzer nur den Code und die Ressourcen herunterladen, die sie benötigen, die App ausführen.
Play Feature Delivery nutzt die erweiterten Funktionen von App Bundles, unter bestimmten Bedingungen bereitgestellt oder on demand heruntergeladen werden können. Dazu müssen Sie diese Funktionen zuerst in Funktionsmodule.
Build-Konfiguration für Funktionsmodul
Wenn Sie mit Android Studio ein neues Funktionsmodul erstellen,
wendet das folgende Gradle-Plug-in auf die Datei build.gradle
des Moduls an.
// The following applies the dynamic-feature plugin to your feature module.
// The plugin includes the Gradle tasks and properties required to configure and build
// an app bundle that includes your feature module.
plugins {
id 'com.android.dynamic-feature'
}
Viele der verfügbaren Unterkünfte Standard-Anwendungs-Plug-in sind auch für Ihr Funktionsmodul verfügbar. Die folgenden Abschnitte beschreiben Sie die Eigenschaften, die Sie in Ihren Build-Konfiguration des Funktionsmoduls.
Was nicht in der Build-Konfiguration des Feature-Moduls enthalten ist
Da jedes Funktionsmodul vom Basismodul abhängt,
übernimmt bestimmte Konfigurationen. Daher sollten Sie Folgendes im Feld
Datei build.gradle
des Funktionsmoduls:
- Signierungskonfigurationen:App-Bundles werden mithilfe von Signaturen signiert. Konfigurationen, die Sie im Basismodul angeben.
- Die Property
minifyEnabled
: Du kannst Folgendes tun: Codekomprimierung aktivieren für Ihr gesamtes App-Projekt nur aus dem Build des Basismoduls Konfiguration. Deshalb sollten Sie diese Eigenschaft Funktionsmodule. Sie können jedoch zusätzliche ProGuard-Regeln angeben für jedes Funktionsmodul. versionCode
undversionName
: Beim Erstellen deines App Bundles: Gradle verwendet Informationen zur App-Version, die vom Basismodul bereitgestellt werden. Du solltest diese Eigenschaften in denbuild.gradle
-Datei.
Beziehung zum Basismodul herstellen
Wenn Android Studio dein Funktionsmodul erstellt, wird es sichtbar
dem Basismodul hinzu, indem Sie die Eigenschaft android.dynamicFeatures
zum
build.gradle
-Datei des Basismoduls, wie unten gezeigt:
// In the base module’s build.gradle file.
android {
...
// Specifies feature modules that have a dependency on
// this base module.
dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
}
Darüber hinaus enthält Android Studio das Basismodul als Abhängigkeit des Funktionsmoduls, wie unten dargestellt:
// In the feature module’s build.gradle file:
...
dependencies {
...
// Declares a dependency on the base module, ':app'.
implementation project(':app')
}
Zusätzliche ProGuard-Regeln angeben
Obwohl nur die Build-Konfiguration des Basismoduls das Verkleinern von Code ermöglichen kann
können Sie für jedes App-Projekt
benutzerdefinierte ProGuard-Regeln festlegen,
mithilfe der Funktion
proguardFiles
wie unten dargestellt.
android.buildTypes {
release {
// You must use the following property to specify additional ProGuard
// rules for feature modules.
proguardFiles 'proguard-rules-dynamic-features.pro'
}
}
Beachte, dass diese ProGuard-Regeln mit denen aus anderen Modulen zusammengeführt werden (einschließlich des Basismoduls) zur Build-Erstellung. Obwohl jede Funktion neue Regeln angeben, gelten diese Regeln für alle Module im App-Projekt
Anwendung bereitstellen
Während du deine App mit Unterstützung für Funktionsmodule entwickelst, kannst du Stellen Sie Ihre App wie gewohnt auf einem verbundenen Gerät bereit, indem Sie Ausführen > Ausführen über die Menüleiste (oder durch Klicken auf Ausführen in in der Symbolleiste).
Wenn Ihr App-Projekt ein oder mehrere Funktionsmodule enthält, können Sie Wählen Sie aus, welche Features bei der Bereitstellung Ihrer App berücksichtigt werden sollen, indem Sie Ihre vorhandene Ausführungs-/Fehlerbehebungskonfiguration als folgt:
- Wählen Sie Ausführen > Edit Configurations (Konfigurationen bearbeiten) aus.
- Wählen Sie im linken Bereich des Dialogfelds Run/Debug Configurations die gewünschte Konfiguration für die Android-App.
- Klicken Sie auf dem Tab General (Allgemein) unter Dynamic features to deploy (Bereitstellung mit dynamischen Funktionen) das Kästchen neben neben jedem Funktionsmodul, das Sie einfügen möchten, der Bereitstellung Ihrer App.
- Klicken Sie auf OK.
Standardmäßig wird Ihre App von Android Studio nicht mithilfe von App Bundles bereitgestellt. für Ihre App. Stattdessen gibt die IDE für Ihr Gerät APKs, die für die Bereitstellungsgeschwindigkeit optimiert sind, statt auf die APK-Größe. Um Android Studio für die Erstellung und Bereitstellung zu konfigurieren APKs und Instant-Versionen aus einem App Bundle, Ausführungs-/Debugging-Einstellungen ändern Konfiguration.
Funktionsmodule für benutzerdefinierte Zustellung verwenden
Ein besonderer Vorteil von Funktionsmodulen ist die Möglichkeit, individuell anzupassen, wie und wann verschiedene Funktionen deiner App auf Geräte mit Android 5.0 heruntergeladen werden, (API-Level 21) oder höher. Um beispielsweise die anfängliche Downloadgröße können Sie bestimmte Funktionen so konfigurieren, dass sie nach Bedarf oder nur für Geräte, die bestimmte Funktionen unterstützen, Fotos aufnehmen oder Augmented Reality-Funktionen unterstützen.
Auch wenn die Downloads beim Hochladen Ihrer App standardmäßig optimiert sind, als App Bundle sind die erweiterten und anpassbaren Optionen für die Funktionsbereitstellung erfordern eine zusätzliche Konfiguration und Modularisierung der Funktionen Ihrer App. Funktionsmodule. Funktionsmodule stellen also die zum Erstellen modularer Funktionen, die Sie jeweils nach Bedarf heruntergeladen.
Stellen Sie sich eine App vor, mit der Nutzer Waren online kaufen und verkaufen können. -Markt. Sie können jede der folgenden Funktionen sinnvoll modularisieren. der App in separate Funktionsmodule:
- Kontoanmeldung und Kontoerstellung
- Marketplace durchsuchen
- Einen Artikel zum Verkauf anbieten
- Zahlungen werden verarbeitet
In der folgenden Tabelle werden die verschiedenen Zustellungsoptionen beschrieben, die diese Funktion bietet. Unterstützung von Modulen und wie sie zur Optimierung des anfänglichen Downloads verwendet werden können Beispielgröße der Marketplace-App.
Lieferoption | Verhalten | Beispielanwendungsfall | Erste Schritte |
---|---|---|---|
Installationszeitpunkt | Funktionsmodule, für die keine Auslieferungsoptionen konfiguriert sind
wie oben beschrieben, werden standardmäßig bei der App-Installation heruntergeladen. Dies ist ein
ist wichtig, weil Sie so die erweiterte Auslieferung
nach und nach anpassen. Sie profitieren beispielsweise von der Modularisierung
App-Funktionen zu aktivieren und die On-Demand-Auslieferung erst zu aktivieren, wenn Sie
On-Demand-Downloads über die Play Feature Delivery Library implementiert.
Außerdem kann die Deinstallation von Funktionen durch Ihre App zu einem späteren Zeitpunkt angefordert werden. Wenn Sie bestimmte Funktionen bei der App-Installation benötigen, können Sie die Installationsgröße reduzieren, indem Sie beantragen, das Feature aus der . |
Ob die App über bestimmte Trainingsaktivitäten verfügt, z. B. eine interaktive Anleitung
zum Kaufen und Verkaufen von Artikeln auf dem Marktplatz, können Sie diese
bei der App-Installation.
Um die installierte Größe der App zu reduzieren, kann die App jedoch Folgendes anfordern: die Funktion nach Abschluss der Schulung wieder zu löschen. |
App mithilfe von Funktionen modularisieren
Module, die keine erweiterten Zustellungsoptionen konfigurieren.
Um zu erfahren, wie du die installierte Größe deiner App reduzieren kannst, indem du bestimmte Funktionsmodule, die Nutzende unter Umständen nicht mehr benötigen, lesen Verwalten installierte Module. |
On-Demand-Auslieferung | Ermöglicht deiner App, Funktionsmodule bei Bedarf anzufordern und herunterzuladen. | Wenn nur 20% der Nutzer der Marketplace-App Artikel zum Verkauf anbieten,
gute Strategie zur Reduzierung der anfänglichen Downloadgröße für die Mehrheit der Nutzer
die Funktionalität zum Aufnehmen von Fotos und ein Objekt
und einen Artikel zum Verkauf anbieten, der on demand verfügbar ist.
herunterladen. Das heißt, Sie können das Funktionsmodul für die
Die Verkaufsfunktion der App darf nur heruntergeladen werden, wenn der Nutzer
am Verkauf von Artikeln
auf dem Markt interessiert sind.
Wenn der Nutzer außerdem nach einem bestimmten Zeitraum keine Artikel mehr verkauft, Die App kann ihre Größe reduzieren, indem sie die Deinstallation der Funktion anfordert. |
Ein Funktionsmodul erstellen und on demand konfigurieren Auslieferung. Ihre App kann dann das Play Feature Delivery Library für die Anfrage können Sie das Modul on demand herunterladen. |
Bedingte Auslieferung | Ermöglicht die Angabe bestimmter Anforderungen an Nutzergeräte, z. B. Hardware Funktionen, Sprache und Mindest-API-Level, um zu bestimmen, wird bei der Installation der App heruntergeladen. | Wenn die Marketplace-App eine globale Reichweite hat, müssen Sie möglicherweise Zahlungsmethoden, die nur in bestimmten Regionen oder vor Ort beliebt sind. In Um die anfängliche Downloadgröße der App zu reduzieren, können Sie Funktionsmodule für die Verarbeitung bestimmter Arten von Zahlungsmethoden eine bedingte Installation auf dem Gerät des Nutzers registrierten Gebietsschema. | Ein Funktionsmodul erstellen und Bedingte Auslieferung konfigurieren |
Sofortige Lieferung | Google Play Instant
ermöglicht es Nutzern, mit deiner App zu interagieren, ohne sie installieren zu müssen
auf ihrem Gerät. Stattdessen können sie Ihre App über die Schaltfläche
Jetzt“ im Google Play Store oder über eine von Ihnen erstellte URL klicken. Diese Form von
können Sie mit Inhalten leichter das Interesse
an Ihrer Website steigern,
Bei der sofortigen Übermittlung können Sie Google Play Instant nutzen, um Ihre bestimmte Funktionen Ihrer App sofort nutzen können, Installation. |
Nehmen wir ein Spiel, bei dem die ersten Level des Spiels schlankes Funktionsmodul. Sie können dieses Modul sofort aktivieren, damit die Nutzer das Spiel sofort über einen URL-Link oder „Teste Jetzt“ ohne App-Installation. | Ein Funktionsmodul erstellen und
konfigurieren
sofortige Zustellung. Ihre App kann dann das
Play Feature Delivery Library für die Anfrage
können Sie das Modul on demand herunterladen.
Sie können Ihre App-Funktionen mithilfe von Funktionen modularisieren, ist nur der erste Schritt. Zur Unterstützung von Google Play Instant Downloadgröße des Basismoduls deiner App und eines bestimmten Instant-fähigen muss strenge Größenbeschränkungen erfüllen. Weitere Informationen Lesen Sie Aktivieren Instant-Apps durch Reduzieren der App- oder Spielgröße. |
URI für eine Ressource erstellen
Wenn Sie auf eine in einem Funktionsmodul gespeicherte Ressource mithilfe eines
URI erstellen, einen Ressourcen-URI für Funktionsmodul mit
Uri.Builder()
:
Kotlin
val uri = Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded .appendPath(resources.getResourceTypeName(resId)) .appendPath(String.format("%s:%s", resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace. resources.getResourceEntryName(resId) )) .build()
Java
String uri = Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded .appendPath(resources.getResourceTypeName(resId)) .appendPath(String.format("%s:%s", resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace. resources.getResourceEntryName(resId) )) .build().toString();
Jeder Teil des Pfades zur Ressource wird während der Laufzeit erstellt. Dadurch wird sichergestellt, dass nach dem Laden der unterteilten APKs der richtige Namespace generiert wird.
Als Beispiel für die Generierung des URI nehmen wir an, Sie haben eine App und Funktionsmodule mit diesen Namen:
- App-Paketname:
com.example.my_app_package
- Paketname der Featureressourcen:
com.example.my_app_package.my_dynamic_feature
Wenn sich resId
im obigen Code-Snippet auf eine Rohdateiressource mit dem Namen
„my_video“ in Ihrem Funktionsmodul ein, würde der obige Uri.Builder()
-Code
Geben Sie Folgendes aus:
android.resource://com.example.my_app_package/raw/com.example.my_app_package.my_dynamic_feature:my_video
Mit diesem URI kann deine App dann auf die Ressource des Funktionsmoduls zugreifen.
Mit dem APK Analyzer können Sie die Pfade in Ihrem URI validieren. um dein APK für dein Funktionsmodul zu prüfen und den Paketnamen zu ermitteln:
Überlegungen zu Funktionsmodulen
Mit Funktionsmodulen können Sie die Build- und Entwicklungsgeschwindigkeit verbessern und die Bereitstellung der Funktionen Ihrer App umfassend anpassen, um die Größe Ihrer App zu reduzieren. Bei der Verwendung von Funktionsmodulen sind jedoch einige Einschränkungen und Grenzfälle zu beachten:
- Installation von mindestens 50 Funktionsmodulen auf einem einzigen Gerät über bedingte oder On-Demand-Auslieferung zu verhindern, kann dies zu Leistungsproblemen führen. der Installationszeitmodule, sind nicht als abnehmbar konfiguriert, sind automatisch in der Basis enthalten. und zählen nur als ein Funktionsmodul auf jedem Gerät.
- Begrenzen Sie die Anzahl der Module, die Sie während der Installation als austauschbar konfigurieren Auslieferung auf 10 oder weniger. Andernfalls wird der die Download- und Installationszeit Ihrer App erhöhen können.
- Support nur auf Geräten mit Android 5.0 (API-Level 21) oder höher können Funktionen bei Bedarf heruntergeladen und installiert werden. So machen Sie Ihre Funktion verfügbar: auf früheren Android-Versionen Fusion beim Erstellen eines Funktionsmoduls.
- Aktivieren Sie SplitCompat. damit deine App Zugriff auf heruntergeladene Funktionsmodule hat, Nachfrage.
- Funktionsmodule sollten in ihrem Manifest keine Aktivitäten mit
android:exported
festgelegt auftrue
. Das liegt daran, dass es keine Garantie dafür gibt, das Funktionsmodul heruntergeladen hat, als eine andere App versucht, Aktivitäten. Außerdem sollte Ihre App bestätigen, dass eine Funktion bevor Sie versuchen, auf den Code und die Ressourcen zuzugreifen. Weitere Informationen finden Sie unter Installierte Module verwalten. - Da du deine App für Play Feature Delivery mit einem App Bundle veröffentlichen musst, sollten Sie das App Bundle kennen, bekannten Problemen.
Manifestreferenz für Funktionsmodul
Beim Erstellen eines neuen Funktionsmoduls mit Android Studio enthält die meisten Manifestattribute, die für das Verhalten des Moduls erforderlich sind. wie ein Funktionsmodul. Außerdem werden einige Attribute vom beim Kompilieren des Systems, sodass Sie sie nicht selbst angeben oder ändern müssen. In der folgenden Tabelle werden die Manifestattribute beschrieben, die für Funktionsmodule.
Attribut | Beschreibung |
---|---|
<manifest |
Das ist Ihr typischer
<ph type="x-smartling-placeholder"></ph>
<manifest> -Block. |
xmlns:dist="http://schemas.android.com/apk/distribution" |
Gibt einen neuen dist: -XML-Namespace an, der
wie unten beschrieben. |
split="split_name" |
Wenn dein App Bundle in Android Studio erstellt wird, ist Folgendes enthalten:
für Sie. Daher sollten Sie keine Änderungen vornehmen,
Sie selbst dieses Attribut.
Definiert den Namen des Moduls, den Ihre App angibt wenn ein On-Demand-Modul mithilfe der Play Feature Delivery Library angefordert wird. So bestimmt Gradle den Wert für dieses Attribut: Wenn Sie ein Funktionsmodul mit Android Studio verwendet die IDE Ihre Angaben als Module name zum Identifizieren des Moduls als Gradle-Unterprojekt in Ihrem Gradle-Einstellungsdatei.
Beim Erstellen Ihres App Bundles verwendet Gradle das letzte Element von
den Unterprojektpfad zum Einfügen dieses Manifestattributs in die
Manifests. Wenn Sie z. B. ein neues Funktionsmodul
das Verzeichnis |
android:isFeatureSplit="true | false"> |
Wenn Android Studio dein App Bundle erstellt, enthält es Folgendes:
dieses Attribut für Sie. Daher sollten Sie keine
oder ändern Sie dieses Attribut manuell.
Gibt an, dass dieses Modul ein Funktionsmodul ist.
Manifeste in den Basismodul- und Konfigurations-APKs
lassen Sie dieses Attribut weg oder legen es auf |
<dist:module |
Dieses neue XML-Element definiert Attribute, die bestimmen, wie die Modul wird als APKs gepackt und verteilt. |
dist:instant="true | false" |
Gibt an, ob das Modul über
Google Play Instant als
eine Instant-Version.
Wenn Ihre App mindestens eine Instant-Funktion enthält Module, müssen Sie auch das Basismodul sofort aktivieren. Bei Verwendung Android Studio 3.5 oder höher wird dies von der IDE erledigt, wenn Sie erstellen Sie eine Instant-Version Funktionsmodul Sie können dieses XML-Element nicht auf |
dist:title="@string/feature_name" |
Gibt einen für den Nutzer sichtbaren Titel für das Modul an. Beispiel:
Das Gerät zeigt diesen Titel möglicherweise an, wenn es einen Download anfordert
bestätigen.
Sie müssen die Stringressource für diesen Titel angeben
im |
<dist:fusing dist:include="true | false" />
|
Gibt an, ob das Modul in Multi-APKs enthalten ist, die
Zielgeräte mit Android 4.4 (API-Level 20) und niedriger an.
Wenn Sie
Verwende |
<dist:delivery> |
Kapselt Optionen zum Anpassen der Modulübermittlung, wie unten gezeigt. Beachten Sie, dass für jedes Funktionsmodul nur ein Typ von für diese benutzerdefinierten Versandoptionen. |
<dist:install-time> |
Gibt an, dass das Modul zum Zeitpunkt der Installation verfügbar sein soll. Dies ist die
Standardverhalten für Funktionsmodule, die keine andere Angabe
die Art der benutzerdefinierten Zustellungsoption.
Weitere Informationen zu Downloads bei der Installation findest du hier: <ph type="x-smartling-placeholder"></ph> Konfigurieren Sie die Installation bei der Installation. Dieser Knoten kann auch Bedingungen angeben, die das Modul auf Geräte, die bestimmte Anforderungen erfüllen, z. B. Gerätefunktionen, oder das minimale API-Level. Weitere Informationen finden Sie unter <ph type="x-smartling-placeholder"></ph> Konfigurieren Sie die bedingte Auslieferung. |
<dist:removable dist:value="true | false" /> |
Wenn die Richtlinie nicht konfiguriert oder auf „ Wenn Die Standardeinstellung ist Hinweis:Diese Funktion ist nur verfügbar, wenn Sie Android-Gradle verwenden. Plug-in 4.2 oder bei Verwendung von Bundletool v1.0 über die Befehlszeile |
</dist:install-time> |
|
<dist:on-demand/> |
Gibt an, dass das Modul als On demand verfügbar sein soll
herunterladen. Das heißt, das Modul ist bei der Installation nicht verfügbar, aber Ihr
App kann später einen Download anfordern.
Weitere Informationen zu On-Demand-Downloads finden Sie unter <ph type="x-smartling-placeholder"></ph> On-Demand-Auslieferung konfigurieren |
</dist:delivery> |
|
<application
|
Wenn das Funktionsmodul keine DEX-Dateien erzeugt, d. h., es enthält
keinen Code, der später in das DEX-Dateiformat kompiliert wird. Sie müssen
(andernfalls können Laufzeitfehler auftreten):
<ph type="x-smartling-placeholder">
|
Weitere Informationen
Weitere Informationen zur Verwendung von Funktionsmodulen finden Sie in den folgenden Ressourcen.
Blogposts
- Neue Funktionen für die Entwicklung, Veröffentlichung und den Ausbau deines Geschäfts bei Google Play
- Die neuesten Updates für Android App Bundle, einschließlich der Add-ons API
- Patchwork Plaid – Eine Geschichte zur Modularisierung
Videos
- Individuelle Bereitstellung mit dem App Bundle und einfaches Teilen von Test-Builds
- Neue Tools zur Optimierung der Größe deiner App und zur Steigerung der Installationen bei Google Play
Nutzungsbedingungen und Datensicherheit
Durch den Zugriff auf die Play Feature Delivery Library oder deren Verwendung erklärst du dich mit den Nutzungsbedingungen für das Play Core Software Development Kit. Bitte lesen und sich mit allen geltenden Nutzungsbedingungen und Richtlinien vertraut machen, bevor Sie auf die Bibliothek zugreifen.
Datensicherheit
Die Play Core-Bibliotheken sind die Schnittstelle zwischen Ihrer App und dem Google Play Store. Wenn Sie Play Core in Ihrer App verwenden, wird der Play Store daher wie die Verarbeitung von Daten gemäß den Google Play-Nutzungsbedingungen Im Folgenden wird beschrieben, wie die Play Core-Bibliotheken Daten verarbeiten, um bestimmte Anfragen aus Ihrer App zu verarbeiten.
API für zusätzliche Sprachen
Im Rahmen der Nutzung erhobene Daten | Liste der installierten Sprachen |
Zweck der Datenerhebung | Die erhobenen Daten werden verwendet, um verschiedene Sprachversionen der App bereitzustellen und die installierten Sprachen nach einem App-Update beizubehalten. |
Datenverschlüsselung | Daten sind verschlüsselt. |
Teilen von Daten | Es werden keine Daten an Dritte weitergegeben. |
Datenlöschung | Die Daten werden nach einer festen Aufbewahrungsdauer gelöscht. |
Play Feature Delivery
Im Rahmen der Nutzung erhobene Daten |
Gerätemetadaten App-Version |
Zweck der Datenerhebung | Die erfassten Daten werden verwendet, um dem Gerät das richtige Modul bereitzustellen und die installierten Module nach einer Aktualisierung und Sicherung und Wiederherstellung beizubehalten. |
Datenverschlüsselung | Daten sind verschlüsselt. |
Teilen von Daten | Es werden keine Daten an Dritte weitergegeben. |
Datenlöschung | Die Daten werden nach einer festen Aufbewahrungsdauer gelöscht. |
Wir möchten Ihnen zwar so transparent wie möglich sein, aber Sie tragen die alleinige Verantwortung wie du das Formular für den Abschnitt zur Datensicherheit von Google Play ausfüllen sollst in Bezug auf die Erhebung, Weitergabe und Sicherheit von Nutzerdaten in Ihrer App.