Konfigurowanie dostarczania warunkowego

Dostarczanie warunkowe pozwala określić wymagania konfiguracyjne urządzenia, dzięki którym moduły funkcji mają być pobierane automatycznie podczas instalowania aplikacji. Możesz na przykład skonfigurować moduł funkcji zawierający funkcje rzeczywistości rozszerzonej (AR) tak, aby był dostępny podczas instalacji aplikacji tylko na urządzeniach obsługujących AR.

Ten mechanizm dostarczania obsługuje obecnie kontrolowanie pobierania modułu w czasie instalacji aplikacji w oparciu o następujące konfiguracje urządzeń:

Jeśli urządzenie nie spełnia wszystkich określonych wymagań, moduł nie jest pobierany w momencie instalacji aplikacji. Aplikacja może jednak później poprosić o pobranie modułu na żądanie za pomocą podstawowego pakietu SDK Play.

Zanim zaczniesz, upewnij się, że używasz Androida Studio w wersji 3.5 lub nowszej. W kolejnych sekcjach znajdziesz informacje o tym, jak dodać obsługę przesyłania warunkowego do modułów funkcji.

Dodaj nowy moduł z opcjami przesyłania warunkowego

Najłatwiejszym sposobem utworzenia nowego modułu funkcji z dostarczaniem warunkowym jest użycie kreatora nowego modułu w następujący sposób:

  1. Aby otworzyć okno Nowy moduł, z paska menu wybierz Plik > Nowy > Nowy moduł.
  2. W oknie New Module (Nowy moduł) wybierz Dynamic Feature Module i kliknij Next (Dalej).
  3. Skonfiguruj moduł w zwykły sposób i kliknij Dalej.
  4. W sekcji Module Download Options (Opcje pobierania modułu) wykonaj te czynności:

    1. Określ Tytuł modułu za pomocą maksymalnie 50 znaków. Platforma używa tego tytułu do identyfikowania modułu użytkownikom, na przykład aby potwierdzić, że użytkownik chce go pobrać. Z tego powodu podstawowy moduł aplikacji musi zawierać tytuł modułu jako zasób w postaci ciągu, który można przetłumaczyć. Podczas tworzenia modułu za pomocą Android Studio IDE dodaje ciąg znaków do modułu podstawowego i wstrzykuje ten wpis w pliku manifestu modułu funkcji:

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. W menu w sekcji Uwzględnianie czasu instalacji wybierz Uwzględnij moduł tylko podczas instalowania aplikacji na urządzeniach z określonymi funkcjami. Spowoduje to utworzenie modułu, który będzie dołączany do aplikacji w momencie jej instalacji na urządzeniach o określonych przez Ciebie konfiguracjach, takich jak funkcje urządzenia czy kraj. Aby odzwierciedlić Twój wybór, Android Studio wstawia do pliku manifestu modułu:

      <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>
      
    3. Jeśli chcesz ograniczyć automatyczne pobieranie modułu do określonych krajów lub minimalnego poziomu interfejsu API, kliknij Zakończ, aby zakończyć tworzenie modułu, a następnie przeczytaj sekcję o określaniu warunków na podstawie kraju lub minimalnym poziomie interfejsu API. W przeciwnym razie kliknij + funkcja urządzenia, aby dodać funkcję, która jest wymagana do pobrania modułu w czasie instalacji.

    4. Obok device-feature wybierz w menu jedną z tych opcji i podaj jej wartość:

      • Nazwa: pozwala określić funkcję sprzętu lub oprogramowania, której urządzenie wymaga, aby pobrać moduł podczas instalacji. Funkcje obsługiwane przez wyświetlanie warunkowe są takie same jak te wymienione jako stałe FEATURE_* przez PackageManager. Po wybraniu tej opcji zacznij wpisywać część stałej wartości funkcji, np. „Bluetooth”, w polu obok menu, a potem wybierz jedną z wyświetlonych sugestii.
      • Wersja OpenGL ES: pozwala określić wersję OpenGL ES, której urządzenie wymaga, aby pobrać moduł podczas instalacji. Po wybraniu tej opcji zacznij wpisywać wersję, np. „0x00030001”, w polu obok menu i wybierz jedną z wyświetlonych sugestii.
    5. Jeśli chcesz dodać wiele warunków na podstawie dostępnych funkcji urządzenia, kliknij + funkcja urządzenia przy każdym warunku funkcji urządzenia, który chcesz określić.

    6. Zaznacz pole Łączenie, jeśli chcesz, aby ten moduł był dostępny na urządzeniach z Androidem 4.4 (poziom interfejsu API 20) lub starszym i zawarty w wielu plikach APK. Oznacza to, że możesz włączyć działanie na żądanie w tym module i wyłączyć fusing, aby pominąć ją na urządzeniach, które nie obsługują pobierania i instalowania dzielonych pakietów APK. Android Studio wstawia w pliku manifestu modułu te informacje, aby odzwierciedlić Twój wybór:

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  5. Gdy skończysz konfigurować opcje pobierania modułów, kliknij Zakończ.

Pamiętaj, że wtyczka Androida do obsługi Gradle nie obsługuje uruchamiania lint z modułów funkcji dynamicznych. Uruchomienie narzędzia lint z odpowiedniego modułu aplikacji spowoduje uruchomienie tej funkcji na modułach funkcji dynamicznych i uwzględnienie wszystkich problemów w raporcie dotyczącym lintowania aplikacji.

Dodawanie opcji przesyłania warunkowego do istniejącego modułu funkcji

Opcje przesyłania warunkowego możesz łatwo dodać do istniejącego modułu funkcji za pomocą jego pliku manifestu. Najpierw jednak przeczytaj informacje o zgodności opcji wyświetlania warunkowego z innymi opcjami dostarczania, które być może masz już włączone.

Najpierw musisz przenieść plik manifestu do nowego elementu <dist:delivery>. Poniższy fragment kodu to przykład starszej składni:

<!-- This is the old syntax. -->
<dist:module
  dist:title="@string/feature_title" dist:onDemand="true">
  <dist:fusing dist:include="true"/>
</dist:module>

Powyższe opcje dostarczania są teraz określone w następujący sposób.

<dist:module
  dist:title="@string/feature_title">
  <dist:delivery>
      <dist:on-demand/>
  </dist:delivery>
  <dist:fusing dist:include="true"/>
</dist:module>

Następnie możesz dodać opcje przesyłania warunkowego zależne od funkcji urządzenia w podany niżej sposób.

<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>

W sekcjach poniżej omawiamy inne opcje przesyłania warunkowego, takie jak według kraju lub minimalnego poziomu interfejsu API.

Zgodność z innymi opcjami pobierania modułów

Moduły funkcji oferują wiele opcji konfigurowania sposobu dostarczania poszczególnych funkcji na urządzenie użytkownika, dlatego warto wiedzieć, jak opcje dostarczania warunkowego wpływają na opcje dostarczania innych ustawień. W tabeli poniżej znajdziesz podsumowanie zgodności przesyłania warunkowego z innymi opcjami pobierania modułów.

Opcja pobierania modułu Zgodność z wyświetlaniem warunkowym
Bezpieczna (<dist:fusing dist:include="true"/>) Jeśli moduł ustawia tę opcję na wartość Prawda, Google Play nie respektuje opcji dostarczania warunkowego określonych podczas wdrażania aplikacji na urządzeniach z interfejsem API na poziomie 19 lub niższym. Oznacza to, że w przypadku urządzeń z interfejsem API na poziomie 19 lub niższym są zawsze uwzględniane moduły funkcji, które włączają fusing w momencie instalacji.
Z obsługą wersji błyskawicznej (<dist:module dist:instant="true"/>) Opcje dostarczania warunkowego nie są obsługiwane w przypadku modułów funkcji z obsługą wersji błyskawicznej.
Na żądanie (<dist:on-demand/>) Jeśli określisz opcje przesyłania warunkowego, moduł będzie domyślnie dostępny również na żądanie.

Określ warunki w zależności od kraju

W ramach przesyłania warunkowego możesz też określić kraje, w których chcesz wykluczyć (lub uwzględnić) pobieranie modułu w momencie instalacji aplikacji. Określenie tego warunku może być przydatne np. wtedy, gdy Twój moduł implementuje formę płatności, która jest niedostępna w niektórych regionach.

W tym kontekście kraj urządzenia jest zwykle określany na podstawie adresu rozliczeniowego użytkownika zarejestrowanego na jego koncie w Google Play.

Aby określić kraje modułu, w pliku manifestu modułu funkcji umieść te informacje.

<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>

Określ warunki dla poziomu interfejsu API

Określenie warunku na podstawie poziomu interfejsu API urządzenia może być przydatne, jeśli moduł funkcji zależy od interfejsów API, które są dostępne tylko w niektórych wersjach platformy Androida.

Aby ustawić warunek na podstawie minimalnego lub maksymalnego poziomu interfejsu API urządzenia, umieść ten kod w pliku manifestu modułu funkcji.

<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>