I moduli delle funzionalità ti consentono di separare determinate funzionalità e risorse dal modulo di base della tua app e di includerle nell'app bundle. Puoi quindi personalizzare le opzioni di distribuzione per controllare quando e come i dispositivi con Android 5.0 (livello API 21) o versioni successive scaricano le funzionalità della tua app.
Tieni presente che questo tipo di modularizzazione richiede un maggiore impegno e, probabilmente, la rifattorizzazione del codice esistente dell'app, quindi valuta attentamente quali funzionalità della tua app trarrebbero il massimo vantaggio dall'essere disponibili per gli utenti on demand.
Se vuoi modularizzare gradualmente le funzionalità dell'app nel tempo, senza modificare il comportamento dell'app o personalizzare le opzioni di distribuzione avanzate, puoi farlo creando moduli delle funzionalità configurati per la distribuzione al momento dell'installazione. In altre parole, puoi modularizzare una funzionalità come modulo della funzionalità, ma non attivare le opzioni avanzate in modo che la funzionalità sia disponibile quando un utente installa la tua app.
Inoltre, i moduli delle funzionalità configurati per la distribuzione al momento dell'installazione possono essere disinstallati in un secondo momento se non sono più necessari. Per farlo, devono essere configurati come rimovibili.
Questa sezione descrive come creare un modulo della funzionalità per la distribuzione al momento dell'installazione. Prima di iniziare, assicurati di utilizzare Android Studio 3.5 o versioni successive e il plug-in Android per Gradle 3.5.0 o versioni successive.
Configura un nuovo modulo per la distribuzione al momento dell'installazione
Il modo più semplice per creare un nuovo modulo della funzionalità è utilizzare Android Studio 3.5 o versioni successive. Poiché i moduli delle funzionalità hanno una dipendenza intrinseca dal modulo dell'app di base, puoi aggiungerli solo ai progetti di app esistenti.
Per aggiungere un modulo della funzionalità al progetto dell'app utilizzando Android Studio, procedi nel seguente modo:
- Se non l'hai ancora fatto, apri il progetto dell'app nell'IDE.
- Seleziona File > Nuovo > Nuovo modulo dalla barra dei menu.
- Nella finestra di dialogo Crea nuovo modulo, seleziona Modulo della funzionalità dinamica e fai clic su Avanti.
- Nella sezione Configura il nuovo modulo, completa quanto segue:
- Seleziona il modulo dell'applicazione di base per il progetto della tua app dal menu a discesa.
- Specifica un Nome modulo. L'IDE utilizza questo nome per identificare il modulo come sottoprogetto Gradle nel file di impostazioni di Gradle. Quando
crei l'app bundle, Gradle utilizza l'ultimo elemento del nome del sottoprogetto
per inserire l'attributo
<manifest split>nel manifest del modulo della funzionalità. - Specifica il nome del pacchetto del modulo. Per impostazione predefinita, Android Studio suggerisce un nome del pacchetto che combina il nome del pacchetto principale del modulo di base e il nome del modulo specificato nel passaggio precedente.
- Seleziona il livello API minimo che vuoi che il modulo supporti. Questo valore deve corrispondere a quello del modulo di base.
- Fai clic su Avanti.
Nella sezione Opzioni di download del modulo, completa quanto segue:
Specifica il Titolo del modulo utilizzando un massimo di 50 caratteri. 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>Nota: se attivi la riduzione delle risorse, ad esempio per le build di release, lo strumento di riduzione potrebbe rimuovere la risorsa stringa del titolo del modulo se il codice nel modulo di base non vi fa riferimento. Per assicurarti che la risorsa stringa rimanga nell'output della build, includila in un file di conservazione delle risorse personalizzate.
Nel menu a discesa in Inclusione al momento dell'installazione, seleziona Includi il modulo al momento dell'installazione. Android Studio inserisce quanto segue nel manifest del modulo per riflettere la tua scelta:
<dist:module ... > <dist:delivery> <dist:install-time /> </dist:delivery> </dist:module>Se vuoi scoprire come creare un modulo della funzionalità che puoi scaricare dopo l'installazione dell'app, leggi Configura la distribuzione on demand.
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 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>
Fai clic su Fine.
Una volta che Android Studio ha terminato la creazione del modulo, esamina i suoi contenuti dal riquadro Progetto (seleziona Visualizza > Finestre degli strumenti > Progetto dalla barra dei menu). Il codice, le risorse e l'organizzazione predefiniti devono essere simili a quelli del modulo dell'app standard.
Rendi rimovibile un modulo al momento dell'installazione
Potrebbe essere utile creare moduli delle funzionalità per la distribuzione al momento dell'installazione che possono essere disinstallati in un secondo momento se non sono più necessari. Ad esempio, per ridurre le dimensioni di installazione della tua app, puoi modularizzare i contenuti necessari per l'addestramento o l'onboarding, quindi disinstallare il modulo della funzionalità utilizzando la libreria di base Play dopo che l'utente ha configurato l'app.
I moduli al momento dell'installazione non sono rimovibili per impostazione predefinita. Per contrassegnare un modulo come rimovibile e consentirne la disinstallazione, aggiungi il tag removable e imposta il relativo valore su true:
<dist:module ... >
<dist:delivery>
<dist:install-time>
<dist:removable dist:value="true"/>
</dist:install-time>
</dist:delivery>
</dist:module>