Il modello di pubblicazione delle app di Google Play utilizza l'app per Android Pacchetti per generare e pubblicare APK ottimizzati per i del dispositivo, in modo che gli utenti scarichino solo il codice e le risorse di cui hanno bisogno la tua app.
Play Feature Delivery utilizza le funzionalità avanzate degli app bundle, consentendo l'erogazione di determinate funzionalità o il download on demand di alcune funzionalità. Per farlo, devi prima separare queste funzionalità dall'app di base in moduli delle funzionalità.
Configurazione della build di modulo delle funzionalità
Quando crei un nuovo modulo di funzionalità con Android Studio,
applica il seguente plug-in Gradle al file build.gradle
del modulo.
// The following applies the dynamic-feature plugin to your feature module.
// The plugin includes the Gradle tasks and properties required to configure and build
// an app bundle that includes your feature module.
plugins {
id 'com.android.dynamic-feature'
}
Molte delle proprietà a disposizione il plug-in dell'applicazione standard sono disponibili anche per il modulo delle funzionalità. Le seguenti sezioni descrivere le proprietà che si dovrebbe e non si dovrebbe includere nel la configurazione della build di un modulo delle funzionalità.
Cosa non includere nella configurazione della build del modulo delle funzionalità
Poiché ogni modulo delle funzionalità dipende dal modulo di base,
eredita determinate configurazioni. Devi quindi omettere quanto segue nella
file build.gradle
del modulo delle funzionalità:
- Configurazioni di firma:gli app bundle vengono firmati utilizzando la firma configurazioni specificate nel modulo di base.
- La proprietà
minifyEnabled
: puoi: attiva la riduzione del codice per l'intero progetto dell'app solo dalla build del modulo di base configurazione. Pertanto, devi omettere questa proprietà dal moduli delle funzionalità. Tuttavia, puoi Specificare regole ProGuard aggiuntive per ogni modulo delle funzionalità. versionCode
eversionName
: quando crei l'app bundle, Gradle utilizza le informazioni sulla versione dell'app fornite dal modulo di base. Devi omettere queste proprietà dall'elencobuild.gradle
.
Stabilisci una relazione con il modulo di base
Quando Android Studio crea il modulo delle funzionalità, lo rende visibile
al modulo di base aggiungendo la proprietà android.dynamicFeatures
alla
file build.gradle
del modulo di base, come mostrato di seguito:
// In the base module’s build.gradle file.
android {
...
// Specifies feature modules that have a dependency on
// this base module.
dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
}
Inoltre, Android Studio include il modulo di base come dipendenza del modulo delle funzionalità, come mostrato di seguito:
// In the feature module’s build.gradle file:
...
dependencies {
...
// Declares a dependency on the base module, ':app'.
implementation project(':app')
}
Specifica regole ProGuard aggiuntive
Sebbene solo la configurazione della build del modulo di base possa consentire la riduzione del codice
per il progetto dell'app, puoi fornire regole ProGuard personalizzate a ogni
delle funzionalità utilizzando
proguardFiles
come mostrato di seguito.
android.buildTypes {
release {
// You must use the following property to specify additional ProGuard
// rules for feature modules.
proguardFiles 'proguard-rules-dynamic-features.pro'
}
}
Tieni presente che queste regole ProGuard sono unite a quelle di altri moduli (incluso il modulo di base) al momento della creazione. Quindi, mentre ogni caratteristica specificare un nuovo insieme di regole, tali regole si applicano a tutti i moduli nel progetto dell'app.
Esegui il deployment dell'app
Durante lo sviluppo dell'app con il supporto dei moduli delle funzionalità, puoi: esegui il deployment dell'app su un dispositivo connesso come faresti normalmente selezionando Esegui > Esegui dalla barra dei menu (o facendo clic su Esegui in barra degli strumenti).
Se il progetto dell'app include uno o più moduli delle funzionalità, puoi: scegli le funzionalità da includere in fase di deployment dell'app modificando la configurazione di esecuzione/debug esistente come che segue:
- Seleziona Esegui > Modifica configurazioni dalla barra dei menu.
- Nel riquadro a sinistra della finestra di dialogo Configurazioni esecuzione/debug, seleziona la configurazione dell'app per Android che preferisci.
- In Funzionalità dinamiche di cui eseguire il deployment nella scheda Generale, controlla accanto a ogni modulo delle funzionalità da includere quando eseguendo il deployment della tua app.
- Fai clic su OK.
Per impostazione predefinita, Android Studio non esegue il deployment dell'app tramite app bundle. la tua app. Invece, l'IDE crea e installa sul tuo dispositivo APK ottimizzati per la velocità di deployment, anziché le dimensioni dell'APK. Per configurare Android Studio in modo da creare e distribuire APK e app istantanee da un app bundle; modifica l'esecuzione/il debug configurazione.
Utilizza i moduli delle funzionalità per una pubblicazione personalizzata
Un vantaggio unico dei moduli delle funzionalità è la possibilità di personalizzare come e quando vengono scaricate diverse funzionalità della tua app sui dispositivi con Android 5.0 (livello API 21) o superiore. Ad esempio, per ridurre le dimensioni di download iniziali dell'app, puoi configurare alcune funzionalità per il download in base alle tue esigenze on demand o solo da dispositivi che supportano determinate funzionalità, come possibilità di scattare foto o supportare funzionalità di realtà aumentata.
Anche se ottieni download altamente ottimizzati per impostazione predefinita quando carichi la tua app come app bundle, le opzioni di pubblicazione delle funzionalità più avanzate e personalizzabili richiedono una configurazione aggiuntiva e la modularizzazione delle funzionalità dell'app moduli delle funzionalità. In altre parole, i moduli delle caratteristiche forniscono lo sviluppo blocchi per creare caratteristiche modulari che puoi configurare per ogni scaricati in base alle esigenze.
Prendi in considerazione un'app che consenta agli utenti di acquistare e vendere prodotti in un marketplace. Puoi ragionevolmente modularizzare ciascuna delle seguenti funzionalità dell'app in moduli di funzionalità separati:
- Accesso e creazione dell'account
- Esplorare il Marketplace
- Mettere un articolo in vendita
- Elaborazione dei pagamenti
Nella tabella che segue vengono descritte le diverse opzioni di pubblicazione disponibili dei moduli e come utilizzarli per ottimizzare il download iniziale dimensione dell'app del Marketplace di esempio.
Opzione di consegna | Comportamento | Esempio di caso d'uso | Per iniziare |
---|---|---|---|
Consegna al momento dell'installazione | Moduli delle funzionalità che non configurano nessuna opzione di pubblicazione
descritti sopra vengono scaricati per impostazione predefinita al momento dell'installazione dell'app. Si tratta di un
un comportamento importante perché implica l'adozione della pubblicazione avanzata
gradualmente. Ad esempio, puoi trarre vantaggio dalla modularizzazione
le funzionalità dell'app e abilitare la distribuzione on demand solo dopo aver completato
implementati con download on demand usando la libreria Play Feature Delivery.
Inoltre, la tua app può chiedere di disinstallare le funzionalità in un secondo momento. Pertanto, se ti servono determinate funzionalità al momento dell'installazione dell'app, ma non dopo, puoi ridurre le dimensioni di installazione richiedendo di rimuovere la funzionalità dal dispositivo. |
Se l'app prevede determinate attività di formazione, ad esempio una guida interattiva
su come acquistare e vendere articoli nel marketplace, puoi includere
per impostazione predefinita
al momento dell'installazione dell'app.
Tuttavia, per ridurre le dimensioni installate, l'app può richiedere di eliminare la caratteristica dopo che l'utente ha completato l'addestramento. |
Modularizza la tua app utilizzando le funzionalità
e moduli che non configurano
opzioni di distribuzione avanzate.
Per scoprire come ridurre le dimensioni installate della tua app rimuovendo alcune i moduli di funzionalità che l'utente potrebbe non avere più bisogno, Gestisci moduli installati. |
Distribuzione on demand | Consente alla tua app di richiedere e scaricare moduli delle funzionalità in base alle esigenze. | Se solo il 20% di coloro che utilizzano l'app del Marketplace pubblica articoli in vendita,
è una buona strategia per ridurre le dimensioni di download iniziali per la maggior parte degli utenti
è quella di rendere la funzionalità per scattare foto, incluso un elemento
la descrizione e la messa in vendita
on demand dell'articolo
scaricare l'app. In altre parole, puoi configurare il modulo delle funzionalità per
la funzionalità di vendita dell'app da scaricare soltanto quando un utente mostra
interesse a collocare sul marketplace gli articoli in vendita.
Inoltre, se l'utente non vende più articoli dopo un certo periodo di tempo, L'app può ridurre le dimensioni di installazione chiedendo di disinstallare la funzionalità. |
Creare un modulo delle funzionalità e Configura on demand dei carichi di lavoro. L'app può quindi usare Play Feature Delivery Library per richiedere a scaricare il modulo on demand. |
Pubblicazione condizionale | Consente di specificare determinati requisiti del dispositivo dell'utente, ad esempio l'hardware caratteristiche, impostazioni internazionali e livello API minimo per determinare se un modello viene scaricata al momento dell'installazione dell'app. | Se l'app del Marketplace ha una copertura globale, potresti dover supportare metodi di pagamento molto usati solo in determinate regioni o locali. Nella per ridurre le dimensioni iniziali di download dell'app, puoi creare file di funzionalità per l'elaborazione di determinati tipi di metodi di pagamento e installarle in modo condizionale sul dispositivo di un utente in base alle impostazioni internazionali registrate. | Creare un modulo delle funzionalità e configurare la consegna condizionale. |
Consegna istantanea | Google Play Instant
Consente agli utenti di interagire con la tua app senza doverla installare
sul loro dispositivo. Possono invece provare la tua app tramite il link "Prova
Adesso". sul Google Play Store o su un URL creato da te. Questa forma di
pubblicare contenuti ti aiuta ad aumentare
il coinvolgimento con i tuoi
dell'app.
Con la pubblicazione istantanea, puoi utilizzare Google Play Instant per consentire ai tuoi agli utenti di provare immediatamente determinate funzionalità della tua app senza dell'installazione. |
Prendi in considerazione un gioco che includa i primi livelli del gioco in un modulo delle funzionalità leggero. Puoi abilitare immediatamente il modulo in modo che che gli utenti possano provare subito il gioco tramite un link URL o "Prova Adesso". senza installare l'app. | Creare un modulo delle funzionalità e
configura
della distribuzione istantanea. L'app può quindi usare
Play Feature Delivery Library per richiedere a
scaricare il modulo on demand.
Ricorda di modularizzare le funzionalità dell'app utilizzando le funzionalità. è solo il primo passo. Per supportare Google Play Instant, dimensioni di download del modulo di base della tua app e una determinata dimensione ad attivazione istantanea deve soddisfare rigide restrizioni sulle dimensioni. Per saperne di più, leggi Abilita esperienze istantanee riducendo le dimensioni dell'app o del gioco. |
Creazione di un URI per una risorsa
Se vuoi accedere a una risorsa archiviata in un modulo di funzionalità utilizzando un
Per generare l'URI di un modulo di funzionalità, procedi nel seguente modo:
Uri.Builder()
:
Kotlin
val uri = Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded .appendPath(resources.getResourceTypeName(resId)) .appendPath(String.format("%s:%s", resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace. resources.getResourceEntryName(resId) )) .build()
Java
String uri = Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded .appendPath(resources.getResourceTypeName(resId)) .appendPath(String.format("%s:%s", resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace. resources.getResourceEntryName(resId) )) .build().toString();
Ogni parte del percorso della risorsa viene creata in fase di esecuzione, assicurando che venga generato lo spazio dei nomi corretto dopo il caricamento degli APK divisi.
Per avere un esempio di come viene generato l'URI, supponiamo che tu abbia un'app moduli di funzionalità con questi nomi:
- Nome pacchetto app:
com.example.my_app_package
- Nome del pacchetto di risorse della funzionalità:
com.example.my_app_package.my_dynamic_feature
Se resId
nello snippet di codice riportato sopra si riferisce a una risorsa di file non elaborato denominata
"my_video" nel modulo delle funzionalità, il codice Uri.Builder()
riportato sopra
genera il seguente output:
android.resource://com.example.my_app_package/raw/com.example.my_app_package.my_dynamic_feature:my_video
Questo URI può quindi essere utilizzato dall'app per accedere alla risorsa del modulo delle funzionalità.
Per convalidare i percorsi nell'URI, puoi utilizzare lo Strumento di analisi APK per controllare l'APK del modulo di funzionalità e determinare il nome del pacchetto:
Considerazioni sui moduli delle funzionalità
Con i moduli delle funzionalità, puoi migliorare la velocità della build e di progettazione e personalizzare ampiamente la distribuzione delle funzionalità della tua app per ridurne le dimensioni. Tuttavia, ci sono alcuni vincoli e casi limite da tenere presenti quando si utilizzano i moduli delle caratteristiche:
- Installazione di 50 o più moduli delle funzionalità su un singolo dispositivo, tramite condizionale o la distribuzione on demand, potrebbe portare a problemi di prestazioni. I moduli di tempo di installazione, non sono configurati come rimovibili, sono inclusi automaticamente nella e contano come un solo modulo delle funzionalità su ogni dispositivo.
- Limita il numero di moduli che configuri come rimovibili per il tempo di installazione di caricamento a 10 o meno. In caso contrario, i tempi di download e installazione dell'app potrebbero aumentare.
- Solo i dispositivi con Android 5.0 (livello API 21) e versioni successive supportano il download e l'installazione di funzionalità on demand. Per rendere disponibile la tua funzionalità alle versioni precedenti di Android, abilita Fonsione quando si crea un modulo di funzionalità.
- Attiva SplitCompat. in modo che la tua app abbia accesso ai moduli delle funzionalità scaricati che vengono pubblicati domanda.
- I moduli delle funzionalità non devono specificare le attività nel file manifest con
android:exported
impostato sutrue
. Questo perché non possiamo garantire che il dispositivo ha scaricato il modulo della funzionalità quando un'altra app tenta di avviare attività. Inoltre, l'app deve confermare che una funzionalità sia scaricate prima di tentare di accedere al codice e alle risorse corrispondenti. Per saperne di più, leggi Gestisci i moduli installati. - Poiché Play Feature Delivery richiede la pubblicazione dell'app tramite un app bundle, assicurati di conoscere l'app bundle problemi noti.
Riferimento per il file manifest dei moduli delle funzionalità
Quando crei un nuovo modulo di funzionalità utilizzando Android Studio, l'IDE include la maggior parte degli attributi del file manifest che il modulo richiede per il comportamento come un modulo delle funzionalità. Inoltre, alcuni attributi vengono inseriti di compilazione del sistema al momento della compilazione, quindi non devi specificarli o modificarli personalmente. La seguente tabella descrive gli attributi del file manifest importanti moduli delle funzionalità.
Attributo | Descrizione |
---|---|
<manifest |
Questo è il tuo tipico
Blocco <manifest> . |
xmlns:dist="http://schemas.android.com/apk/distribution" |
Specifica un nuovo spazio dei nomi XML dist:
descritti più avanti. |
split="split_name" |
Quando Android Studio crea l'app bundle, include
per te. Pertanto, non devi includere o modificare
questo attributo autonomamente.
Definisce il nome del modulo specificato dalla tua app per richiedere un modulo on demand usando la libreria Play Feature Delivery. In che modo Gradle determina il valore di questo attributo: Per impostazione predefinita, quando crei un modulo di funzionalità utilizzando Android Studio, l'IDE utilizza quello che Nome modulo per identificare il modulo come sottoprogetto Gradle nel tuo File delle impostazioni di Gradle.
Quando crei l'app bundle, Gradle utilizza l'ultimo elemento
il percorso del sottoprogetto per inserire questo attributo manifest nel
del file manifest. Ad esempio, se crei un nuovo modulo di funzionalità in
la directory |
android:isFeatureSplit="true | false"> |
Quando Android Studio crea l'app bundle, include
questo attributo per te. Pertanto, non devi includere
oppure modificalo manualmente.
Specifica che questo modulo è un modulo delle funzionalità.
I file manifest nel modulo di base e negli APK di configurazione
ometti questo attributo o impostalo su |
<dist:module |
Questo nuovo elemento XML definisce gli attributi che determinano il modo in cui viene pacchettizzato e distribuito come APK. |
dist:instant="true | false" |
Specifica se il modulo deve essere disponibile tramite
Google Play Instant come
un'esperienza istantanea.
Se la tua app include una o più funzionalità ad attivazione istantanea devi abilitare immediatamente il modulo di base. Quando si utilizza Android Studio 3.5 o versioni successive, l'IDE lo fa per te quando per creare un modello istantaneo modulo delle funzionalità. Non puoi impostare questo elemento XML su |
dist:title="@string/feature_name" |
Specifica un titolo del modulo rivolto agli utenti. Ad esempio:
il dispositivo potrebbe visualizzare questo titolo quando richiede il download
conferma.
Devi includere la risorsa stringa per questo titolo
nel |
<dist:fusing dist:include="true | false" />
|
Specifica se includere il modulo in APK multipli che
scegliere come target dispositivi con Android 4.4 (livello API 20) e versioni precedenti.
Inoltre, quando
usa |
<dist:delivery> |
Incapsula opzioni che personalizzano la distribuzione dei moduli, come mostrato di seguito. Tieni presente che ogni modulo delle funzionalità deve configurare un solo tipo di queste opzioni di consegna personalizzate. |
<dist:install-time> |
Specifica che il modulo deve essere disponibile al momento dell'installazione. Questo è il
comportamento predefinito per i moduli di funzionalità che non specificano un altro
un tipo di opzione di consegna personalizzata.
Per scoprire di più sui download al momento dell'installazione, consulta Configura la consegna al momento dell'installazione. Questo nodo può anche specificare condizioni che limitano il modulo ai dispositivi che soddisfano determinati requisiti, come le funzionalità del dispositivo, paese o livello API minimo. Per saperne di più, leggi Configurare la consegna condizionale. |
<dist:removable dist:value="true | false" /> |
Se il criterio non viene configurato o se viene impostato su Se Il valore predefinito è Nota: questa funzionalità è disponibile soltanto quando si utilizza Android Gradle. plug-in 4.2 o quando si usa bundletool v1.0 dalla riga di comando. |
</dist:install-time> |
|
<dist:on-demand/> |
Specifica che il modulo deve essere disponibile on demand
scaricare l'app. Ciò significa che il modulo non è disponibile al momento dell'installazione, ma
l'app potrebbe richiedere il download in un secondo momento.
Per scoprire di più sui download on demand, leggi Configura la distribuzione on demand. |
</dist:delivery> |
|
<application
|
Se il modulo delle caratteristiche non genera file DEX, ovvero contiene
codice che venga poi compilato nel formato file DEX: devi eseguire
(altrimenti, potresti ricevere errori di runtime):
|
Risorse aggiuntive
Per scoprire di più sull'utilizzo dei moduli delle funzionalità, prova le seguenti risorse.
Blog post
- Nuove funzionalità che ti aiuteranno a sviluppare, rilasciare e far crescere la tua attività su Google Play
- Gli ultimi aggiornamenti di Android App Bundle, inclusa l'API delle lingue aggiuntive
- Patchwork Plaid: storia di modularizzazione
Video
- Pubblicazione personalizzabile con l'app bundle e condivisione semplificata delle build di test
- Nuovi strumenti per ottimizzare le dimensioni della tua app e aumentare le installazioni su Google Play
Termini di servizio e sicurezza dei dati
Accedendo a Google Play Feature Delivery Library o utilizzandolo, accetti il Termini di servizio del Core Software Development Kit di Play. Leggere e di comprendere tutti i termini e le norme applicabili prima di accedere alla libreria.
Sicurezza dei dati
Le librerie Play Core sono l'interfaccia di runtime dell'app con il Google Play Store. Di conseguenza, quando utilizzi Play Core nella tua app, il Play Store esegue il proprio processi, inclusa la gestione dei dati come regolata Termini di servizio di Google Play. Le informazioni che seguono descrivono il modo in cui le librerie Play Core gestiscono i dati per: per elaborare richieste specifiche provenienti dalla tua app.
API Additional Language
Dati raccolti sull'utilizzo | Elenco di lingue installate |
Scopo della raccolta dei dati | I dati raccolti vengono usati per pubblicare versioni dell'app in diverse lingue e per conservare le lingue installate dopo un aggiornamento dell'app. |
Crittografia dei dati | I dati sono criptati. |
Condivisione dei dati | I dati non vengono trasferiti a terze parti. |
Eliminazione dei dati | I dati vengono eliminati dopo un periodo di conservazione fisso. |
Play Feature Delivery
Dati raccolti sull'utilizzo |
Metadati del dispositivo Versione applicazione |
Scopo della raccolta dei dati | I dati raccolti vengono utilizzati per offrire il modulo giusto al dispositivo e per conservare i moduli installati dopo un aggiornamento, un backup e un ripristino. |
Crittografia dei dati | I dati sono criptati. |
Condivisione dei dati | I dati non vengono trasferiti a terze parti. |
Eliminazione dei dati | I dati vengono eliminati dopo un periodo di conservazione fisso. |
Nonostante il nostro impegno per essere il più trasparente possibile, l'utente è l'unico responsabile per decidere come rispondere al modulo relativo alla sezione Sicurezza dei dati di Google Play in merito alle prassi di raccolta, condivisione e sicurezza dei dati utente della tua app.