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:
- Funzionalità hardware e software del dispositivo, inclusa la versione 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, 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:
- 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 delle funzionalità dinamiche e fai clic su Avanti.
- Configura il modulo come faresti normalmente e fai clic su Avanti.
Nella sezione Opzioni di download del modulo, completa i seguenti passaggi:
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>
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>
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.
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, 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.
- 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 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>
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>