Configura distribuzione condizionale

La pubblicazione condizionale ti consente di impostare determinati requisiti di configurazione del dispositivo per il download automatico dei moduli delle funzionalità durante l'installazione dell'app. Ad esempio, puoi configurare un modulo della funzionalità che include funzionalità per la realtà aumentata (AR) da rendere disponibili 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 del dispositivo:

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

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

Aggiungi un nuovo modulo con opzioni di distribuzione condizionale

Il modo più semplice per creare un nuovo modulo della funzionalità con distribuzione condizionale è utilizzare la procedura guidata Nuovo modulo, come segue:

  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 della funzionalità dinamica 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 quanto segue:

    1. Specifica il Titolo del modulo utilizzando un massimo di 50 caratteri. La piattaforma utilizza questo titolo per identificare il modulo per gli utenti, ad esempio quando conferma se l'utente vuole scaricare il modulo. Per questo motivo, il modulo di base dell'app deve includere il titolo del modulo come risorsa stringa, che puoi tradurre. Quando crei il modulo utilizzando Android Studio, l'IDE aggiunge la risorsa stringa al modulo di base e inserisce la seguente voce nel manifest del modulo della 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 al momento dell'installazione dell'app per i dispositivi con funzionalità specificate, che crea un modulo incluso nell'app al momento dell'installazione dell'app solo sui dispositivi con determinate configurazioni che puoi specificare, ad esempio funzionalità del dispositivo o paese. Android Studio inserisce quanto segue nel 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 caso contrario, 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:

      • Name: consente di specificare una funzionalità hardware o software richiesta da un dispositivo per scaricare il modulo al momento dell'installazione. Le funzionalità supportate dalla distribuzione condizionale sono le stesse elencate come costanti FEATURE_* da PackageManager. Se selezioni questa opzione, inizia a digitare una parte qualsiasi del valore costante della funzionalità, ad esempio "bluetooth", nel campo accanto al menu a discesa e 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 e 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 questo modulo sia disponibile per i dispositivi con Android 4.4 (livello API 20) e versioni precedenti e incluso in più APK. Ciò significa che puoi attivare il comportamento on demand per questo modulo e disattivare la fusione 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. Al termine della configurazione delle opzioni di download del modulo, fai clic su Fine.

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

Aggiungi opzioni di pubblicazione condizionale a un modulo della funzionalità esistente

Puoi aggiungere opzioni di distribuzione condizionale a un modulo della funzionalità esistente tramite il manifest del modulo. Tuttavia, devi prima leggere informazioni sulla 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 sopra indicate 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 distribuzione condizionale in base alle funzionalità del dispositivo, come segue.

<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 distribuzione 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 la modalità di distribuzione di ogni funzionalità sul dispositivo di un utente, è importante capire in che modo le opzioni di distribuzione condizionale sono influenzate da altre impostazioni. La tabella seguente riassume la compatibilità della distribuzione condizionale con altre opzioni di download dei moduli.

Opzione di download del modulo Compatibilità con la distribuzione condizionale
Fusione (<dist:fusing dist:include="true"/>) Se un modulo imposta questa opzione su true, Google Play non rispetta le opzioni di distribuzione condizionale specificate quando esegui il deployment della tua app su dispositivi con livello API 19 o precedente. In altre parole, i moduli delle funzionalità che consentono la fusione sono sempre inclusi al momento dell'installazione per i dispositivi con livello API 19 o precedente.
Ad 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 distribuzione condizionale, il modulo è disponibile anche on demand.

Specifica le condizioni in base al paese

La distribuzione 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 tuo modulo implementa un metodo di pagamento non disponibile in determinate regioni.

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

Per specificare i paesi per il tuo modulo, includi quanto segue nel manifest del modulo della 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 basata sul livello API di un dispositivo può essere utile se un modulo della funzionalità dipende da API disponibili solo in determinate versioni della piattaforma Android.

Per impostare una condizione basata su un livello API minimo o massimo del dispositivo, includi quanto segue nel file manifest del modulo della 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>

Specifica le condizioni per altre proprietà del dispositivo (beta)

Per specificare le condizioni per altre proprietà del dispositivo, come nome del modello, RAM, funzionalità di sistema e system on chip, puoi utilizzare un file di configurazione del targeting per dispositivo.

Per creare un file di configurazione del targeting per dispositivo, consulta la documentazione relativa al targeting per dispositivo.

Dopo aver creato il file di configurazione, puoi specificare i gruppi di dispositivi per il tuo modulo includendo quanto segue nel manifest del modulo della funzionalità.

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