Mit der bedingten Bereitstellung können Sie bestimmte Gerätekonfigurationsanforderungen für Funktionsmodule festlegen, die während der App-Installation automatisch heruntergeladen werden sollen. Sie können beispielsweise ein Funktionsmodul mit Funktionen für Augmented Reality (AR) konfigurieren, das bei der App-Installation nur auf Geräten verfügbar ist, die AR unterstützen.
Dieser Bereitstellungsmechanismus unterstützt derzeit die Steuerung des Downloads eines Moduls bei der App-Installation basierend auf den folgenden Gerätekonfigurationen:
- Hardware- und Softwarefunktionen des Geräts, einschließlich OpenGL ES-Version
- Land des Nutzers
- API-Level
Wenn ein Gerät nicht allen von Ihnen angegebenen Anforderungen entspricht, wird das Modul nicht bei der App-Installation heruntergeladen. Ihre App kann jedoch später über das Play Core SDK anfordern, das Modul bei Bedarf herunterzuladen.
Bevor Sie beginnen, müssen Sie Android Studio 3.5 oder höher verwenden. In den folgenden Abschnitten wird gezeigt, wie Sie Ihren Feature-Modulen die Unterstützung für die bedingte Auslieferung hinzufügen.
Neues Modul mit Optionen für die bedingte Auslieferung hinzufügen
Am einfachsten erstellen Sie ein neues Funktionsmodul mit nutzerabhängiger Auslieferung über den Assistenten Neues Modul. Gehen Sie dazu so vor:
- Wählen Sie in der Menüleiste Datei > Neu > Neues Modul aus, um das Dialogfeld Neues Modul zu öffnen.
- Wählen Sie im Dialogfeld „Neues Modul“ die Option Dynamic Feature Module aus und klicken Sie auf Weiter.
- Konfigurieren Sie das Modul wie gewohnt und klicken Sie auf Weiter.
Führen Sie im Bereich Downloadoptionen für Module folgende Schritte aus:
Geben Sie den Modultitel mit bis zu 50 Zeichen an. Die Plattform verwendet diesen Titel, um das Modul für Nutzer zu identifizieren, wenn sie beispielsweise bestätigen, dass sie das Modul herunterladen möchten. Aus diesem Grund muss das Basismodul Ihrer App den Modultitel als Stringressource enthalten, die Sie übersetzen können. Wenn Sie das Modul mit Android Studio erstellen, fügt die IDE dem Basismodul die Stringressource hinzu und fügt den folgenden Eintrag in das Manifest des Funktionsmoduls ein:
<dist:module ... dist:title="@string/feature_title"> </dist:module>
Wählen Sie im Drop-down-Menü unter Einschluss bei der Installation die Option Modul nur bei der App-Installation für Geräte mit bestimmten Funktionen einschließen aus. Dadurch wird ein Modul erstellt, das bei der Installation Ihrer App nur auf Geräten mit bestimmten Konfigurationen enthalten ist, die Sie angeben können, z. B. Gerätefunktionen oder Land. Android Studio fügt das Folgende in das Manifest des Moduls ein, um Ihre Auswahl widerzuspiegeln:
<dist:module ... > <dist:delivery> <dist:install-time> <dist:conditions> <!-- If you specify conditions, as described in the steps below, the IDE includes them here. --> </dist:conditions> </dist:install-time> </dist:delivery> </dist:module>
Wenn Sie den automatischen Download des Moduls auf bestimmte Länder oder ein Mindest-API-Level beschränken möchten, klicken Sie auf Fertigstellen, um das Modul zu erstellen. Lesen Sie dann den Abschnitt zum Festlegen von Bedingungen basierend auf dem Land oder der Mindest-API-Version. Andernfalls klicken Sie auf + Gerätefunktion, um eine Funktion hinzuzufügen, die auf einem Gerät erforderlich ist, damit das Modul bei der Installation heruntergeladen werden kann.
Wählen Sie neben device-feature eine der folgenden Optionen aus dem Drop-down-Menü aus und geben Sie den Wert an:
- Name:Hier können Sie eine Hardware- oder Softwarefunktion angeben, die auf einem Gerät vorhanden sein muss, damit das Modul bei der Installation heruntergeladen werden kann. Die von der bedingten Auslieferung unterstützten Funktionen sind dieselben wie die als
FEATURE_*
-Konstanten mitPackageManager
aufgeführten. Wenn Sie diese Option auswählen, geben Sie einen Teil des konstanten Werts der Funktion, z. B. „bluetooth“, in das Feld neben der Drop-down-Liste ein und wählen Sie einen der angezeigten Vorschläge aus. - OpenGL ES-Version:Hier können Sie eine OpenGL ES-Version angeben, die auf einem Gerät erforderlich ist, um das Modul bei der Installation herunterzuladen. Wenn Sie diese Option auswählen, geben Sie die Version in das Feld neben dem Drop-down-Menü ein, z. B. „0x00030001“, und wählen Sie einen der angezeigten Vorschläge aus.
- Name:Hier können Sie eine Hardware- oder Softwarefunktion angeben, die auf einem Gerät vorhanden sein muss, damit das Modul bei der Installation heruntergeladen werden kann. Die von der bedingten Auslieferung unterstützten Funktionen sind dieselben wie die als
Wenn Sie mehrere Bedingungen basierend auf verfügbaren Gerätefunktionen hinzufügen möchten, klicken Sie für jede Bedingung, die Sie angeben möchten, auf + Gerätefunktion.
Klicken Sie das Kästchen neben Zusammenführen an, wenn dieses Modul auf Geräten mit Android 4.4 (API-Level 20) und niedriger verfügbar sein und in Multi-APKs enthalten sein soll. Sie können also das On-Demand-Verhalten für dieses Modul aktivieren und die Zusammenführung deaktivieren, um es auf Geräten zu entfernen, die das Herunterladen und Installieren von unterteilten APKs nicht unterstützen. Android Studio fügt das Folgende in das Manifest des Moduls ein, um Ihre Auswahl widerzuspiegeln:
<dist:module ...> <dist:fusing dist:include="true | false" /> </dist:module>
Klicken Sie auf Fertigstellen, wenn Sie mit der Konfiguration der Downloadoptionen für das Modul fertig sind.
Das Android Gradle-Plug-in unterstützt nicht das Ausführen von lint aus dynamischen Funktionsmodulen. Wenn Sie Lint über das entsprechende Anwendungsmodul ausführen, wird Lint auch auf die Module mit dynamischen Funktionen angewendet und alle Probleme werden in den Lint-Bericht der App aufgenommen.
Bedingte Auslieferungsoptionen zu einem vorhandenen Funktionsmodul hinzufügen
Sie können einem vorhandenen Funktionsmodul ganz einfach über das Manifest des Moduls Optionen für die bedingte Auslieferung hinzufügen. Lesen Sie sich jedoch zuerst die Informationen zur Kompatibilität von Optionen für die bedingte Zustellung mit anderen Zustellungsoptionen durch, die Sie möglicherweise bereits aktiviert haben.
Zuerst müssen Sie Ihr Manifest in das neue Element <dist:delivery>
migrieren. Das folgende Code-Snippet zeigt ein Beispiel für die ältere Syntax:
<!-- This is the old syntax. -->
<dist:module
dist:title="@string/feature_title" dist:onDemand="true">
<dist:fusing dist:include="true"/>
</dist:module>
Die oben genannten Auslieferungsoptionen werden jetzt so angegeben:
<dist:module
dist:title="@string/feature_title">
<dist:delivery>
<dist:on-demand/>
</dist:delivery>
<dist:fusing dist:include="true"/>
</dist:module>
Anschließend können Sie bedingte Auslieferungsoptionen basierend auf Gerätefunktionen hinzufügen.
<dist:module
dist:title="@string/feature_title">
<dist:delivery>
<dist:on-demand/>
<dist:install-time>
<dist:conditions>
<!-- Requires that the device support AR to download the module at
app install-time. -->
<dist:device-feature dist:name="android.hardware.camera.ar"/>
</dist:conditions>
</dist:install-time>
</dist:delivery>
<dist:fusing dist:include="true"/>
</dist:module>
In den folgenden Abschnitten werden weitere Optionen für die bedingte Auslieferung beschrieben, z. B. nach Land oder nach Mindest-API-Level.
Kompatibilität mit anderen Downloadoptionen für Module
Da mit Funktionsmodulen mehrere Optionen zur Konfiguration der Auslieferung der einzelnen Funktionen auf das Gerät eines Nutzers verfügbar sind, ist es wichtig zu wissen, wie sich andere Einstellungen auf die Optionen für die bedingte Auslieferung auswirken. In der folgenden Tabelle wird die Kompatibilität der bedingten Bereitstellung mit anderen Downloadoptionen für Module zusammengefasst.
Option zum Herunterladen von Modulen | Kompatibilität mit bedingter Auslieferung |
---|---|
Fusion (<dist:fusing dist:include="true"/> ) |
Wenn ein Modul diese Option auf „wahr“ setzt, werden die von Ihnen bei der Bereitstellung Ihrer App auf Geräten mit API-Level 19 oder niedriger angegebenen Optionen für die bedingte Bereitstellung von Google Play nicht berücksichtigt. Funktionsmodule, die die Fusion ermöglichen, werden also immer bei der Installation für Geräte mit API-Level 19 oder niedriger eingeschlossen. |
Instant-aktiviert (<dist:module dist:instant="true"/> ) |
Optionen für die bedingte Auslieferung werden für Feature-Module mit aktivierter Instant-Version nicht unterstützt. |
On-Demand (<dist:on-demand/> ) |
Wenn Sie Optionen für die bedingte Auslieferung angeben, ist das Modul standardmäßig auch auf Anfrage verfügbar. |
Bedingungen nach Land angeben
Mit der bedingten Bereitstellung können Sie auch angeben, welche Länder beim Herunterladen Ihres Moduls bei der App-Installation ausgeschlossen (oder eingeschlossen) werden sollen. Die Angabe dieser Bedingung kann beispielsweise nützlich sein, wenn Ihr Modul eine Zahlungsmethode implementiert, die in bestimmten Regionen nicht verfügbar ist.
In diesem Zusammenhang wird das Land des Geräts in der Regel anhand der Zahlungsadresse des Nutzers bestimmt, die in seinem Google Play-Konto registriert ist.
Wenn Sie Länder für Ihr Modul angeben möchten, fügen Sie Folgendes in das Manifest des Funktionsmoduls ein.
<dist:conditions>
<!-- Set to "true" to specify countries to exclude from downloading
this module at app install-time. By default, modules are available
for download to all user countries. -->
<dist:user-countries dist:exclude="true">
<!-- Specifies the two-letter CLDR country code for regions that should
not download the module at app install-time. -->
<dist:country dist:code="CN"/>
<dist:country dist:code="HK"/>
</dist:user-countries>
</dist:conditions>
Bedingungen für das API-Level angeben
Die Angabe einer Bedingung basierend auf der API-Ebene eines Geräts kann nützlich sein, wenn ein Funktionsmodul von APIs abhängt, die nur in bestimmten Versionen der Android-Plattform verfügbar sind.
Wenn Sie eine Bedingung basierend auf einer Mindest- oder Höchststufe der Geräte-API festlegen möchten, fügen Sie Folgendes in das Manifest Ihres Funktionsmoduls ein.
<dist:conditions> <!-- Specifies the minimum API level that the device must satisfy in order to download your module at app install-time. The API level you specify must be greater or equal to the module's own minSdkVersion. --> <dist:min-sdk dist:value="21"/> <!-- Specifies the maximum API level that the device cannot exceed in order to download your module at app install-time. The API level you specify must be less than or equal to the module's own maxSdkVersion. --> <dist:max-sdk dist:value="24"/> </dist:conditions>
Bedingungen für andere Geräteeigenschaften festlegen (Beta)
Wenn Sie Bedingungen für andere Geräteeigenschaften wie Modellname, RAM, Systemfunktionen und System-on-Chip angeben möchten, können Sie eine Konfigurationsdatei für die Geräteausrichtung verwenden.
Informationen zum Erstellen einer Konfigurationsdatei für das Geräte-Targeting finden Sie in der Dokumentation zum Geräte-Targeting.
Nachdem Sie die Konfigurationsdatei erstellt haben, können Sie Gerätegruppen für Ihr Modul angeben, indem Sie Folgendes in das Manifest des Funktionsmoduls einfügen:
<dist:conditions>
<dist:device-groups>
<dist:device-group dist:name="myCustomGroup1"/>
<dist:device-group dist:name="myCustomGroup2"/>
</dist:device-groups>
</dist:conditions>