Konfigurowanie dostarczania warunkowego

Dostarczanie warunkowe umożliwia skonfigurowanie określonych wymagań konfiguracji urządzenia, aby moduły funkcji były pobierane automatycznie podczas instalacji aplikacji. Możesz na przykład skonfigurować moduł funkcji, który zawiera funkcje rzeczywistości rozszerzonej (AR), tak aby były dostępne podczas instalowania aplikacji tylko na urządzeniach obsługujących AR.

Ten mechanizm dostarczania obsługuje obecnie kontrolowanie pobierania modułu w momencie instalacji aplikacji na podstawie tych konfiguracji urządzenia:

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

Zanim zaczniesz, sprawdź, czy używasz Android Studio w wersji 3.5 lub nowszej. Z sekcji poniżej dowiesz się, jak dodać obsługę wyświetlania warunkowego do modułów funkcji.

Dodawanie nowego modułu z opcjami dostawy warunkowej

Najprostszym sposobem utworzenia nowego modułu funkcji z dostawą warunkową jest kreator Nowy moduł:

  1. Aby otworzyć okno Nowy moduł, na pasku menu kliknij Plik > Nowy > Nowy moduł.
  2. W oknie Nowy moduł wybierz Dynamiczny moduł funkcji i kliknij Dalej.
  3. Skonfiguruj moduł tak jak zwykle i kliknij Dalej.
  4. W sekcji Opcje pobierania modułów:

    1. Podaj Tytuł modułu, który może mieć maksymalnie 50 znaków. Platforma używa tego tytułu, aby identyfikować moduł dla użytkowników, na przykład w celu potwierdzenia, czy użytkownik chce go pobrać. Z tego powodu moduł podstawowy aplikacji musi zawierać tytuł modułu jako zasób ciągu tekstowego, który możesz przetłumaczyć. Podczas tworzenia modułu w Android Studio IDE automatycznie dodaje do modułu podstawowego zasób ciągu znaków i wstrzykuje do pliku manifestu modułu funkcji następujący wpis:

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. W menu Uwzględnienie w czasie instalacji wybierz Uwzględnij moduł tylko w przypadku urządzeń z określonymi funkcjami. Spowoduje to utworzenie modułu, który jest uwzględniany w aplikacji tylko w czasie instalacji na urządzeniach z określonymi konfiguracjami, np. z funkcjami urządzenia lub z kraju. Android Studio wstrzykuje do pliku manifestu modułu te elementy, które odpowiadają Twojemu wyborowi:

      <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 do określonego poziomu interfejsu API, kliknij Zakończ, aby zakończyć tworzenie modułu, a następnie przeczytaj sekcję dotyczącą określania warunków na podstawie kraju lub minimalnego poziomu interfejsu API. W przeciwnym razie kliknij + funkcja urządzenia, aby dodać funkcję, której urządzenie wymaga, aby pobrać moduł w momencie instalacji.

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

      • Nazwa: umożliwia określenie funkcji sprzętowej lub programowej, której urządzenie wymaga do pobrania modułu w czasie instalacji. Funkcje obsługiwane przez przesyłanie warunkowe są takie same jak te wymienione jako stałe FEATURE_*PackageManager. Jeśli wybierzesz tę opcję, zacznij wpisywać dowolną część stałej wartości funkcji, np. „bluetooth”, w polu obok menu i wybierz jedną z wyświetlonych sugestii.
      • Wersja OpenGL ES: umożliwia określenie wersji OpenGL ES, której wymaga urządzenie, aby pobrać moduł w momencie instalacji. Jeśli wybierzesz tę opcję, zacznij wpisywać wersję, np. „0x00030001”, w polu obok menu i wybierz jedną z wyświetlonych sugestii.
    5. Jeśli chcesz dodać kilka warunków na podstawie dostępnych funkcji urządzenia, kliknij + funkcja urządzenia obok każdego warunku funkcji urządzenia, który chcesz określić.

    6. Zaznacz pole obok opcji Fusing, jeśli chcesz, aby ten moduł był dostępny na urządzeniach z Androidem 4.4 (poziom interfejsu API 20) lub starszym i włączony w zestawie wielu plików APK. Oznacza to, że możesz włączyć działanie tego modułu na żądanie i wyłączyć łączenie, aby pominąć go na urządzeniach, które nie obsługują pobierania i instalowania podzielonych plików APK. Android Studio wstrzykuje do pliku manifestu modułu następujące informacje:

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  5. Po skonfigurowaniu opcji pobierania modułów kliknij Zakończ.

Pamiętaj, że wtyczka Gradle na Androida nie obsługuje uruchamiania linta z modułów dynamicznych funkcji. Uruchomienie lint w odpowiednim module aplikacji spowoduje przeprowadzenie lintowania w modułach funkcji dynamicznych i uwzględnienie wszystkich problemów w raporcie lint aplikacji.

Dodawanie opcji dostawy zależnie od typu urządzenia do istniejącego modułu funkcji

Opcje dostarczania warunkowego możesz łatwo dodać do istniejącego modułu funkcji za pomocą pliku manifestu modułu. Najpierw jednak zapoznaj się z informacjami o zgodności opcji dostawy warunkowej z innymi opcjami dostawy, które być może masz już włączone.

Aby rozpocząć, musisz najpierw przenieść plik manifestu do nowego elementu <dist:delivery>. Poniżej znajduje się fragment kodu, który pokazuje starszy składnia:

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

Opcje wyświetlania są teraz określone w ten 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 uwzględnić opcje dostawy warunkowej na podstawie funkcji urządzenia w ten 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 dostarczania warunkowego, takie jak dostarczanie według kraju lub minimalnego poziomu interfejsu API.

Zgodność z innymi opcjami pobierania modułów

Ponieważ moduły funkcji oferują wiele opcji konfiguracji wyświetlania poszczególnych funkcji na urządzeniu użytkownika, ważne jest, aby wiedzieć, jak inne ustawienia wpływają na opcje wyświetlania warunkowego. W tabeli poniżej znajdziesz podsumowanie zgodności dostawy warunkowej z innymi opcjami pobierania modułów.

Opcja pobierania modułu Zgodność z dostępem warunkowym
Fusing (<dist:fusing dist:include="true"/>) Jeśli moduł ustawia tę opcję na „Prawda”, Google Play nie uwzględnia opcji dostarczania warunkowego określonych podczas wdrażania aplikacji na urządzenia z interfejsem API na poziomie 19 lub niższym. Oznacza to, że moduły funkcji, które umożliwiają łączenie, są zawsze uwzględniane w czasie instalacji na urządzeniu z interfejsem API na poziomie 19 lub niższym.
Włączone natychmiastowo (<dist:module dist:instant="true"/>) Opcje dostarczania warunkowego nie są obsługiwane w przypadku modułów funkcji obsługiwanych przez funkcję natychmiastowego uruchamiania.
Na żądanie (<dist:on-demand/>) Jeśli określisz opcje dostarczania warunkowego, moduł będzie domyślnie dostępny na żądanie.

Określanie warunków na podstawie kraju

Dostarczanie warunkowe umożliwia też określenie, z których krajów chcesz wykluczyć (lub uwzględnić) pobieranie modułu w momencie instalowania aplikacji. Określenie tego warunku może być przydatne, jeśli na przykład Twój moduł implementuje formę płatności, która jest niedostępna w pewnych regionach.

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

Aby określić kraje, w których ma być dostępny moduł, umieść w pliku manifestu modułu 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ślanie warunków dotyczących poziomu interfejsu API

Określanie 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 Android.

Aby ustawić warunek na podstawie minimalnego lub maksymalnego poziomu interfejsu API urządzenia, dodaj do pliku manifestu modułu funkcji następujące informacje.

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

Określanie warunków dla innych właściwości urządzeń (beta)

Aby określić warunki dla innych właściwości urządzenia, takich jak nazwa modelu, pamięć RAM, funkcje systemu i system na chipie, możesz użyć pliku konfiguracji do kierowania na urządzenie.

Aby utworzyć plik konfiguracji kierowania na urządzenia, zapoznaj się z dokumentacją dotyczącą kierowania na urządzenia.

Po utworzeniu pliku konfiguracji możesz określić grupy urządzeń dla swojego modułu, podając w manifeście modułu te informacje:

<dist:conditions>
   <dist:device-groups>
      <dist:device-group dist:name="myCustomGroup1"/>
      <dist:device-group dist:name="myCustomGroup2"/>
   </dist:device-groups>
</dist:conditions>