Bereitstellung bei der Installation konfigurieren

Mit Funktionsmodulen können Sie bestimmte Funktionen und Ressourcen vom Basismodul Ihrer App trennen und in Ihr App-Bundle aufnehmen. Anschließend kannst du die Übermittlungsoptionen anpassen, um festzulegen, wann und wie Geräte mit Android 5.0 (API-Level 21) oder höher die Funktionen deiner App herunterladen.

Diese Art der Modularisierung erfordert mehr Aufwand und möglicherweise eine Refaktorierung des vorhandenen Codes deiner App. Überlege dir daher genau, welche Funktionen deiner App am meisten davon profitieren würden, wenn sie Nutzern on demand zur Verfügung stehen.

Wenn Sie App-Funktionen im Laufe der Zeit schrittweise modularisieren möchten, ohne das Verhalten Ihrer App zu ändern oder erweiterte Bereitstellungsoptionen anzupassen, können Sie Funktionsmodule erstellen, die für die Bereitstellung bei der Installation konfiguriert sind. Das bedeutet, dass Sie eine Funktion als Funktionsmodul modularisieren können, ohne erweiterte Optionen zu aktivieren, sodass die Funktion verfügbar ist, wenn ein Nutzer Ihre App installiert.

Außerdem können Funktionsmodule, die für die Bereitstellung bei der Installation konfiguriert sind, später deinstalliert werden, wenn sie nicht mehr benötigt werden. Dazu müssen sie als Wechselmedien eingerichtet sein.

In diesem Abschnitt wird beschrieben, wie Sie ein Funktionsmodul für die Bereitstellung bei der Installation erstellen. Bevor Sie beginnen, prüfen Sie, ob Sie Android Studio 3.5 oder höher und das Android-Gradle-Plug-in 3.5.0 oder höher verwenden.

Neues Modul für die Bereitstellung bei der Installation konfigurieren

Am einfachsten lässt sich ein neues Funktionsmodul mit Android Studio 3.5 oder höher erstellen. Da Funktionsmodule eine inhärente Abhängigkeit vom Basis-App-Modul haben, können Sie sie nur vorhandenen App-Projekten hinzufügen.

So fügen Sie Ihrem App-Projekt mit Android Studio ein Funktionsmodul hinzu:

  1. Öffnen Sie Ihr App-Projekt in der IDE, falls noch nicht geschehen.
  2. Wählen Sie in der Menüleiste Datei > Neu > Neues Modul aus.
  3. Wähle im Dialogfeld Neues Modul erstellen die Option Dynamisches Funktionsmodul aus und klicke auf Weiter.
  4. Führen Sie im Abschnitt Neues Modul konfigurieren die folgenden Schritte aus:
    1. Wählen Sie im Drop-down-Menü das Basisanwendungsmodul für Ihr App-Projekt aus.
    2. Geben Sie einen Modulnamen an. Die IDE verwendet diesen Namen, um das Modul in der Gradle-Einstellungsdatei als Gradle-Unterprojekt zu identifizieren. Wenn Sie Ihr App-Bundle erstellen, verwendet Gradle das letzte Element des Unterprojektnamens, um das Attribut <manifest split> in das Manifest des Funktionsmoduls einzufügen.
    3. Geben Sie den Paketnamen des Moduls an. Standardmäßig schlägt Android Studio einen Paketnamen vor, der den Namen des Stammverzeichnispakets des Basismoduls und den im vorherigen Schritt angegebenen Modulnamen kombiniert.
    4. Wählen Sie das Mindest-API-Level aus, das das Modul unterstützen soll. Dieser Wert sollte mit dem des Basismoduls übereinstimmen.
  5. Klicken Sie auf Weiter.
  6. Führen Sie im Abschnitt Module Download Options (Downloadoptionen für Module) folgende Schritte aus:

    1. Geben Sie den Modultitel mit bis zu 50 Zeichen an. Das Basismodul Ihrer App muss den Modultitel als String-Ressource enthalten, die Sie übersetzen können. Wenn Sie das Modul mit Android Studio erstellen, fügt die IDE die String-Ressource für Sie dem Basismodul hinzu und fügt den folgenden Eintrag in das Manifest des Funktionsmoduls ein:

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      

      Hinweis: Wenn Sie die Entfernung von Ressourcen aktivieren, z. B. für Ihre Release-Builds, entfernt der Shrinker möglicherweise die String-Ressource für den Modultitel, wenn der Code in Ihrem Basismodul nicht darauf verweist. Damit die String-Ressource in der Build-Ausgabe erhalten bleibt, fügen Sie die Ressource in eine benutzerdefinierte Ressourcendatei ein.

    2. Wählen Sie im Drop-down-Menü unter Install-time inclusion (Einbeziehung bei der Installation) die Option Include module at install-time (Modul bei der Installation einbeziehen) aus. Android Studio fügt Folgendes in das Manifest des Moduls ein, um Ihre Auswahl widerzuspiegeln:

      <dist:module ... >
        <dist:delivery>
            <dist:install-time />
        </dist:delivery>
      </dist:module>
      

      Wenn Sie erfahren möchten, wie Sie ein Funktionsmodul erstellen, das nach der Installation der App heruntergeladen werden kann, lesen Sie den Hilfeartikel On-Demand-Bereitstellung konfigurieren.

    3. Setze ein Häkchen neben Zusammenführen, wenn dieses Modul für Geräte mit Android 4.4 (API-Level 20) und niedriger verfügbar sein und in Multi-APKs enthalten sein soll. Das bedeutet, dass du es auf Geräten weglassen kannst, die das Herunterladen und Installieren von unterteilten APKs nicht unterstützen. Android Studio fügt Folgendes in das Manifest des Moduls ein, um Ihre Auswahl widerzuspiegeln:

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  7. Klicken Sie auf Fertig.

Nachdem Android Studio das Modul erstellt hat, können Sie sich den Inhalt im Bereich Project ansehen. Wählen Sie dazu in der Menüleiste View > Toolfenster > Project aus. Der Standardcode, die Ressourcen und die Organisation sollten denen des Standard-App-Moduls ähneln.

Installationsmodul entfernbar machen

Es kann nützlich sein, Funktionsmodule für die Bereitstellung bei der Installation zu erstellen, die später deinstalliert werden können, wenn sie nicht mehr benötigt werden. Wenn Sie beispielsweise die Installationsgröße Ihrer App reduzieren möchten, können Sie Inhalte, die für das Training oder Onboarding erforderlich sind, modularisieren und dann das Funktionsmodul mit der Play Core API deinstallieren, nachdem der Nutzer Ihre App eingerichtet hat.

Module, die bei der Installation heruntergeladen werden, können standardmäßig nicht entfernt werden. Wenn Sie ein Modul als entfernbar kennzeichnen und die Deinstallation zulassen möchten, fügen Sie das Tag removable hinzu und setzen Sie den Wert auf true:

<dist:module ... >
  <dist:delivery>
      <dist:install-time>
          <dist:removable dist:value="true"/>
      </dist:install-time>
  </dist:delivery>
</dist:module>