Configura distribuzione condizionale

La pubblicazione condizionale consente di impostare determinati requisiti di configurazione dei dispositivi per il download automatico dei moduli delle funzionalità durante l'installazione dell'app. Ad esempio, puoi configurare un modulo di funzionalità che include funzionalità per la realtà aumentata (AR) in modo che sia disponibile al momento dell'installazione dell'app solo per i dispositivi che supportano l'AR.

Questo meccanismo di distribuzione attualmente supporta il controllo del download di un modulo al momento dell'installazione dell'app in base alle seguenti configurazioni dei dispositivi:

Se un dispositivo non soddisfa tutti i requisiti specificati, il modulo non viene scaricato al momento dell'installazione dell'app. Tuttavia, la tua app potrebbe richiedere in un secondo momento di scaricare il modulo on demand utilizzando l'SDK Play Core.

Prima di iniziare, assicurati di utilizzare Android Studio 3.5 o versioni successive. Le seguenti sezioni mostrano come aggiungere il supporto per la pubblicazione condizionale ai moduli delle funzionalità.

Aggiungi un nuovo modulo con opzioni di pubblicazione condizionale

Il modo più semplice per creare un nuovo modulo di funzionalità con pubblicazione condizionale è tramite la procedura guidata Nuovo modulo, come indicato di seguito:

  1. Per aprire la finestra di dialogo Nuovo modulo, seleziona File > Nuovo > Nuovo modulo dalla barra dei menu.
  2. Nella finestra di dialogo Nuovo modulo, seleziona Modulo delle funzionalità dinamiche e fai clic su Avanti.
  3. Configura il modulo come faresti normalmente e fai clic su Avanti.
  4. Nella sezione Opzioni di download del modulo, completa i seguenti passaggi:

    1. Specifica il Titolo del modulo utilizzando fino a 50 caratteri. La piattaforma utilizza questo titolo per identificare il modulo per gli utenti, ad esempio per confermare se l'utente vuole scaricare il modulo. Per questo motivo, il modulo di base dell'app deve includere il titolo del modulo come una risorsa stringa, che puoi tradurre. Quando crei il modulo con Android Studio, l'IDE aggiunge automaticamente la risorsa stringa al modulo di base e inserisce la seguente voce nel manifest del modulo delle funzionalità:

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. Nel menu a discesa in Inclusione al momento dell'installazione, seleziona Includi il modulo solo all'installazione dell'app per dispositivi con funzionalità specificate per creare un modulo incluso nell'app al momento dell'installazione dell'app solo su dispositivi con determinate configurazioni che puoi specificare, ad esempio funzionalità del dispositivo o paese. Android Studio inserisce quanto segue nel file manifest del modulo per riflettere la tua scelta:

      <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. Se vuoi limitare il download automatico del modulo a determinati paesi o a un livello API minimo, fai clic su Fine per completare la creazione del modulo, quindi leggi la sezione su come specificare le condizioni in base al paese o al livello API minimo. In alternativa, fai clic su + funzionalità del dispositivo per aggiungere una funzionalità richiesta da un dispositivo per scaricare il modulo al momento dell'installazione.

    4. Accanto a device-feature, seleziona una delle seguenti opzioni dal menu a discesa e specifica il relativo valore:

      • Nome: consente di specificare una funzionalità hardware o software richiesta da un dispositivo per scaricare il modulo al momento dell'installazione. Le funzionalità supportate dalla pubblicazione condizionale sono le stesse elencate come costanti FEATURE_* da PackageManager. Se selezioni questa opzione, inizia a digitare qualsiasi parte del valore costante della funzionalità, ad esempio "bluetooth", nel campo accanto al menu a discesa, quindi seleziona uno dei suggerimenti visualizzati.
      • Versione OpenGL ES: consente di specificare una versione di OpenGL ES richiesta da un dispositivo per scaricare il modulo al momento dell'installazione. Se selezioni questa opzione, inizia a digitare la versione, ad esempio "0x00030001", nel campo accanto al menu a discesa, quindi seleziona uno dei suggerimenti visualizzati.
    5. Se vuoi aggiungere più condizioni in base alle funzionalità del dispositivo disponibili, fai clic su + funzionalità del dispositivo per ogni condizione della funzionalità del dispositivo che vuoi specificare.

    6. Seleziona la casella accanto a Fusing se vuoi che il modulo sia disponibile per i dispositivi con Android 4.4 (livello API 20) e versioni precedenti inclusi in APK multipli. Ciò significa che puoi abilitare il comportamento on demand per questo modulo e disattivare l'integrazione per ometterlo dai dispositivi che non supportano il download e l'installazione di APK divisi. Android Studio inserisce quanto segue nel manifest del modulo per riflettere la tua scelta:

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  5. Dopo aver configurato le opzioni di download del modulo, fai clic su Fine.

Tieni presente che il plug-in Android per Gradle non supporta l'esecuzione di lint da moduli di funzionalità dinamiche. L'esecuzione di lint dal modulo dell'applicazione corrispondente eseguirà l'lint sui relativi moduli di funzionalità dinamiche e includerà tutti i problemi nel report lint dell'app.

Aggiungere opzioni di pubblicazione condizionale a un modulo di funzionalità esistente

Puoi aggiungere facilmente opzioni di pubblicazione condizionale a un modulo di funzionalità esistente tramite il manifest del modulo. Tuttavia, ti consigliamo di verificare innanzitutto la compatibilità delle opzioni di pubblicazione condizionale con altre opzioni di pubblicazione che potresti aver già attivato.

Per iniziare, devi prima eseguire la migrazione del manifest al nuovo elemento <dist:delivery>. Lo snippet di codice riportato di seguito mostra un esempio della sintassi precedente:

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

Le opzioni di pubblicazione indicate sopra sono ora specificate come segue.

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

Puoi quindi includere opzioni di consegna condizionale basate sulle funzionalità del dispositivo, come di seguito.

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

Le sezioni seguenti illustrano altre opzioni per la pubblicazione condizionale, ad esempio per paese o livello API minimo.

Compatibilità con altre opzioni di download dei moduli

Poiché i moduli delle funzionalità offrono più opzioni per configurare il modo in cui ogni funzionalità viene pubblicata sul dispositivo di un utente, è importante capire in che modo le opzioni di pubblicazione condizionale sono influenzate da altre impostazioni. La seguente tabella riassume la compatibilità della pubblicazione condizionale con altre opzioni di download di moduli.

Opzione di download del modulo Compatibilità con la pubblicazione condizionale
Fusione (<dist:fusing dist:include="true"/>) Se un modulo imposta questa opzione su true, Google Play non rispetta le opzioni di pubblicazione condizionale specificate durante il deployment della tua app su dispositivi con livello API 19 o precedente. In altre parole, i moduli delle funzionalità che consentono il fusione sono sempre inclusi al momento dell'installazione per i dispositivi con livello API 19 o precedente.
Con attivazione istantanea (<dist:module dist:instant="true"/>) Le opzioni di pubblicazione condizionale non sono supportate per i moduli delle funzionalità ad attivazione istantanea.
On demand (<dist:on-demand/>) Per impostazione predefinita, se specifichi le opzioni di pubblicazione condizionale, il modulo è disponibile anche on demand.

Specifica le condizioni in base al paese

La pubblicazione condizionale ti consente anche di specificare i paesi che vuoi escludere (o includere) dal download del modulo al momento dell'installazione dell'app. Specificare questa condizione potrebbe essere utile se, ad esempio, il modulo implementa un metodo di pagamento non disponibile in alcune regioni.

In questo contesto, il paese del dispositivo è solitamente determinato dall'indirizzo di fatturazione dell'utente registrato nel suo account Google Play.

Per specificare i paesi per il modulo, includi quanto segue nel file manifest del modulo delle funzionalità.

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

Specifica le condizioni per il livello API

Specificare una condizione in base al livello API di un dispositivo può essere utile se un modulo delle funzionalità dipende dalle API disponibili solo in alcune versioni della piattaforma Android.

Per impostare una condizione in base a un livello API minimo o massimo del dispositivo, includi quanto segue nel manifest del modulo delle funzionalità.

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