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 includa la funzionalità per la realtà aumentata (AR) da rendere disponibile al momento dell'installazione dell'app solo per i dispositivi che supportano l'AR.
Questo meccanismo di importazione attualmente supporta il controllo del download di un modulo al momento dell'installazione dell'app in base alle seguenti configurazioni del dispositivo:
- Funzionalità hardware e software del dispositivo, inclusa la versione di OpenGL ES
- Paese dell'utente
- Livello API
Se un dispositivo non soddisfa tutti i requisiti specificati, il modulo non viene scaricato al momento dell'installazione dell'app. Tuttavia, in un secondo momento la tua app potrebbe richiedere 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 sezioni che seguono mostrano come aggiungere il supporto della pubblicazione condizionale ai moduli di funzionalità.
Aggiungere un nuovo modulo con opzioni di pubblicazione condizionale
Il modo più semplice per creare un nuovo modulo di funzionalità con la pubblicazione condizionata è tramite la procedura guidata Nuovo modulo, come segue:
- Per aprire la finestra di dialogo Nuovo modulo, seleziona File > Nuovo > Nuovo modulo dalla barra dei menu.
- Nella finestra di dialogo Nuovo modulo, seleziona Modulo di funzionalità dinamiche e fai clic su Avanti.
- Configura il modulo come faresti normalmente e fai clic su Avanti.
Nella sezione Opzioni di download dei moduli, segui questi passaggi:
Specifica il Titolo del modulo utilizzando fino a 50 caratteri. La piattaforma utilizza questo titolo per identificare il modulo agli utenti quando, ad esempio, viene chiesto all'utente se vuole scaricarlo. 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 file manifest del modulo di funzionalità:
<dist:module ... dist:title="@string/feature_title"> </dist:module>
Nel menu a discesa in Inclusione al momento dell'installazione, seleziona Includi solo il modulo al momento dell'installazione dell'app per i dispositivi con funzionalità specifiche, che consente di creare un modulo incluso nella tua app al momento dell'installazione solo sui dispositivi con determinate configurazioni che puoi specificare, ad esempio le funzionalità del dispositivo o il 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>
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 e poi 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.
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_*
daPackageManager
. Se selezioni questa opzione, inizia a digitare qualsiasi parte 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.
- 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
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.
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 negli APK multipli. Ciò significa che puoi attivare il comportamento on demand per questo modulo e disattivare l'unione per ometterlo dai dispositivi che non supportano il download e l'installazione di APK suddivisi. Android Studio inserisce quanto segue nel file manifest del modulo per riflettere la tua scelta:
<dist:module ...> <dist:fusing dist:include="true | false" /> </dist:module>
Al termine della configurazione delle opzioni di download dei moduli, fai clic su Fine.
Tieni presente che il plug-in Gradle per Android non supporta l'esecuzione di lint dai moduli di funzionalità dinamiche. L'esecuzione di lint dal modulo dell'applicazione corrispondente eseguirà lint sui suoi moduli di funzionalità dinamiche e includerà tutti i problemi nel report di lint dell'app.
Aggiungere opzioni di pubblicazione condizionale a un modulo delle funzionalità esistente
Puoi aggiungere facilmente opzioni di pubblicazione condizionale a un modulo di funzionalità esistente tramite il manifest del modulo. Tuttavia, ti consigliamo di leggere prima la sezione 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 pubblicazione condizionali 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 pubblicazione condizionale, ad esempio per paese o livello API minimo.
Compatibilità con altre opzioni di download dei moduli
Poiché i moduli di 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 interessate da altre impostazioni. La tabella seguente riassume la compatibilità del caricamento condizionale con altre opzioni di download dei 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 caricamento condizionale specificate durante il deployment dell'app su dispositivi con livello API 19 o precedente. In altre parole, i moduli delle funzionalità che attivano l'unione sono sempre inclusi al momento dell'installazione per i dispositivi con livello API 19 o precedente. |
Con riproduzione immediata (<dist:module dist:instant="true"/> ) |
Le opzioni di pubblicazione condizionale non sono supportate per i moduli di funzionalità con 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
Il caricamento condizionale ti consente anche di specificare i paesi da escludere (o includere) dal download del modulo al momento dell'installazione dell'app. La specifica di 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 sul suo account Google Play.
Per specificare i paesi per il modulo, includi quanto segue nel manifest del modulo di 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
La specifica di una condizione in base al livello API di un dispositivo può essere utile se un modulo di funzionalità dipende da API disponibili solo in determinate versioni della piattaforma Android.
Per impostare una condizione in base a un livello API del dispositivo minimo o massimo, 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>
Specificare condizioni per altre proprietà del dispositivo (beta)
Per specificare condizioni per altre proprietà del dispositivo, come nome del modello, RAM, funzionalità di sistema e system on chip, puoi utilizzare un file di configurazione per il 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 file 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>