Costi dei dati ridotti per miliardi di persone
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
In alcuni paesi, i piani dati possono costare fino al 10% del reddito mensile di un utente tipico. Ciò significa che ridurre al minimo le dimensioni di download dell'app e consentire all'utente di controllare il modo in cui l'app utilizza i dati può avere un grande vantaggio tangibile per molti utenti. Ridurre al minimo le dimensioni di download consente anche di risparmiare spazio nella memoria interna, che è una risorsa scarsa in alcuni dispositivi.
Qui puoi trovare alcune strategie per ottimizzare la quantità di dati utilizzata dalla tua app, sia in rete che nella memoria interna.
Riduci dimensioni app
La riduzione delle dimensioni dell'app è uno dei modi fondamentali per aiutare l'utente a consumare meno dati, sia in termini di dati di rete che di archiviazione interna. Questa sezione descrive diversi approcci per ridurre le dimensioni dell'app.
Ridurre le dimensioni degli asset grafici APK
- Le risorse grafiche sono spesso il fattore che contribuisce maggiormente alle dimensioni dell'APK. L'ottimizzazione può ridurre i download e, di conseguenza, velocizzare
i tempi di installazione per gli utenti.
- Per le risorse grafiche come le icone, utilizza il formato Scalable Vector Graphics (SVG). Le immagini SVG hanno dimensioni ridotte rispetto ai grafici bitmap e possono essere visualizzate in fase di runtime e con qualsiasi risoluzione. La Android Support Library fornisce un'implementazione compatibile con le versioni precedenti per le risorse vettoriali in Android 2.1 (livello API 7).
Inizia a utilizzare i vettori con
questo post su Medium.
- Per le immagini non vettoriali, come le foto, utilizza WebP per ridurre i tempi di caricamento delle immagini e risparmiare larghezza di banda di rete. È stato dimostrato che WebP produce file di dimensioni inferiori rispetto alle versioni controparti PNG e JPG, con almeno la stessa qualità dell'immagine. Anche con impostazioni con perdita di dati, WebP è in grado di produrre un'immagine quasi identica all'originale. Android include il supporto WebP con perdita di dati a partire da Android 4.0 (livello API 14: Ice Cream Sandwich) e il supporto per WebP trasparente e senza perdita di dati a partire da Android 4.2 (livello API 17: Jelly Bean).
- Se hai molte immagini di grandi dimensioni con più densità, ti consigliamo di utilizzare il supporto di più APK per suddividere l'APK in base alla densità. Ciò si traduce in build
destinate a densità specifiche, il che significa che gli utenti con dispositivi a bassa densità
non dovranno incorrere nella penalizzazione del download di asset ad alta densità inutilizzati.
- Per maggiori informazioni sulla riduzione delle dimensioni degli APK, consulta le pagine
Ridurre le dimensioni degli APK e
Ridurre il codice e le risorse. Inoltre, potete trovare una guida dettagliata su come ridurre le dimensioni degli APK in questa
serie di post di medie dimensioni.
Riduci dimensioni codice
- Ogni libreria nel tuo progetto Android sta aggiungendo codice potenzialmente inutilizzato all'APK. Presta particolare attenzione all'utilizzo di librerie esterne perché non tutte le librerie sono progettate per l'utilizzo nelle app mobile. Assicurati che le librerie utilizzate dalla tua app
siano ottimizzate per l'uso mobile.
- Potresti ottimizzare il codice compilato utilizzando uno strumento come ProGuard. ProGuard identifica il codice che non è in uso e lo rimuove dall'APK. Inoltre,
abilita la riduzione delle risorse in fase di build impostando
minifyEnabled=true
, shrinkResources=true
in
build.gradle
. In questo modo le risorse non utilizzate verranno rimosse automaticamente
dall'APK.
- Quando utilizzi Google Play Services, dovresti
includere in modo selettivo solo le API necessarie nell'APK.
- Per ulteriori informazioni su come ridurre le dimensioni del codice nell'APK, consulta il corso di formazione per Android su come evitare framework di inserimento di dipendenze.
Consenti lo spostamento dell'app in un'unità di archiviazione esterna (SD)
- I dispositivi a basso costo spesso hanno poco spazio di archiviazione sul dispositivo. Gli utenti possono estendere questa funzionalità con le schede SD; tuttavia, le app devono dichiarare esplicitamente che supportano l'installazione su unità di archiviazione esterna prima che gli utenti possano spostarle.
- Consenti l'installazione dell'app su un'unità di archiviazione esterna usando il flag
android:installLocation
nel file AndroidManifest.xml. Per ulteriori informazioni su come consentire lo spostamento delle app su unità di archiviazione esterna, consulta la guida di Android sul percorso di installazione delle app.
Ridurre l'utilizzo del disco per le app dopo l'installazione
- Se l'utilizzo del disco della tua app è basso, è meno probabile che gli utenti disinstallino l'app quando lo spazio libero sul dispositivo è in esaurimento. È importante applicare limiti alle cache per evitare che l'utilizzo del disco da parte della tua app aumenti a tempo indeterminato. Assicurati di aver inserito i dati memorizzati nella cache in
getCacheDir()
; il sistema può eliminare i file inseriti qui in base alle esigenze, quindi non verranno visualizzati come spazio di archiviazione impegnato nell'app.
Offri l'utilizzo della rete configurabile
La piattaforma Android offre diversi modi con cui puoi offrire all'utente il controllo
sull'utilizzo della rete da parte della tua app, ottimizzandola in base alle sue esigenze. Ad esempio, al primo utilizzo, la tua app può guidare l'utente attraverso una serie di impostazioni relative alla rete.
Puoi anche fornire una schermata delle preferenze di rete al di fuori dell'app.
Fornisci esperienze di onboarding per le scelte di rete degli utenti
- Le app che consentono agli utenti di ridurre l'utilizzo dei dati vengono ben accolte, anche se hanno requisiti di dati pesanti. Se la tua app utilizza una notevole quantità di larghezza di banda (ad esempio, app di streaming video), puoi fornire agli utenti un'esperienza di onboarding per configurare l'utilizzo della rete. Ad esempio,
puoi consentire all'utente di forzare gli stream video con velocità in bit più bassa sulle reti
mobili.
- Le impostazioni aggiuntive che consentono agli utenti di controllare la sincronizzazione dei dati, il precaricamento e il comportamento di utilizzo della rete (ad esempio, il precaricamento di tutte le categorie di notizie speciali solo tramite Wi-Fi) aiutano gli utenti a personalizzare il comportamento della tua app in base alle loro esigenze.
- Per ulteriori informazioni sulla gestione dell'utilizzo della rete, consulta il corso di formazione Android sulla gestione dell'utilizzo della rete.
Fornisci una schermata
delle preferenze di rete
- Puoi accedere alle impostazioni di rete dell'app dall'esterno dell'app tramite la schermata delle preferenze di rete. Puoi aprire questa schermata dalla schermata delle impostazioni di sistema o dalla schermata di utilizzo dei dati di sistema.
- Per offrire una schermata delle preferenze di rete a cui gli utenti possono accedere dall'app e dalle impostazioni di sistema, includi nell'app un'attività che supporti l'azione
ACTION_MANAGE_NETWORK_USAGE
.
- Per ulteriori informazioni sull'aggiunta di una schermata delle preferenze di rete, consulta il materiale di formazione Android sull'
implementazione di un'attività relativa alle preferenze.
Risorse aggiuntive
Per saperne di più su questo argomento, consulta le seguenti risorse aggiuntive:
Post del blog
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-07-27 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-07-27 UTC."],[],[],null,["# Reduced data cost for billions\n\n\u003cbr /\u003e\n\n\nData plans in some countries can cost upwards of 10% of a typical user's monthly income. This\nmeans that minimizing your app's download size and letting the user control how your app uses\ndata can have a large, tangible benefit to many users. Minimizing download size also helps\nconserve space in internal storage, which is a scarce resource in some devices.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\nHere you can find some strategies to help optimize the amount of data your app uses, both over\nthe network and in internal storage.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nReduce app size\n---------------\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\nReducing app size is one of the fundamental ways you can help your user consume less data, in\nterms of both network data and internal storage. This section describes several approaches to\nreducing app size.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n### Reduce APK graphical asset size\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n- Graphical assets are often the largest contributor to the size of the APK. Optimizing these can result in smaller downloads and thus faster installation times for users.\n- For graphical assets such as icons, use the Scalable Vector Graphics (SVG) format. SVG images are tiny in size compared to bitmap graphics and can be rendered at runtime to any resolution. The [Android Support Library](/tools/support-library) provides a backward-compatible implementation for vector resources to Android 2.1 (API level 7). Get started with vectors with [this Medium post](https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88).\n- For non-vector images, such as photos, use [WebP](https://developers.google.com/speed/webp/) to reduce image load times and save network bandwidth. WebP is proven to result in smaller file sizes than its PNG and JPG counterparts, with at least the same image quality. Even at lossy settings, WebP can produce a nearly identical image to the original. Android has included lossy WebP support since Android 4.0 (API level 14: Ice Cream Sandwich) and support for lossless, transparent WebP since Android 4.2 (API level 17: Jelly Bean).\n- If you have many large images across multiple densities, consider using [Multiple\n APK support](/google/play/publishing/multiple-apks) to split your APK by density. This results in builds targeted for specific densities, meaning users with low-density devices won't have to incur the penalty of downloading unused high-density assets.\n- For more information about reducing APK size, see [Reduce APK Size](/topic/performance/reduce-apk-size) and [Shrink Your Code and Resources](/studio/build/shrink-code). In addition, you can find a detailed guide on reducing APK size in this [series of Medium posts](https://medium.com/@wkalicinski/smallerapk-part-4-multi-apk-through-abi-and-density-splits-477083989006).\n\n### Reduce code size\n\n- Every library in your Android project is adding potentially unused code to the APK. Be particularly careful about using external libraries because not all libraries are designed for use in mobile apps. Ensure that the libraries your app is using are optimized for mobile use.\n- Consider optimizing your compiled code using a tool such as [ProGuard](/tools/help/proguard). ProGuard identifies code that isn't being used and removes it from your APK. Also [enable resource shrinking](http://tools.android.com/tech-docs/new-build-system/resource-shrinking) at build time by setting `minifyEnabled=true`, `shrinkResources=true` in `build.gradle`---this automatically removes unused resources from your APK.\n- When using Google Play services, you should [selectively include](/google/play-services/setup#add_google_play_services_to_your_project) only the necessary APIs into your APK.\n- For more information on reducing code size in your APK, see the Android training on how to [Avoid\n dependency injection frameworks](/training/articles/memory#DependencyInjection).\n\n### Allow app to be moved to external (SD) storage\n\n- Low-cost devices often come with little on-device storage. Users can extend this with SD cards; however, apps need to explicitly declare that they support being installed to external storage before users can move them.\n- Allow your app to be installed to external storage using the [`\n android:installLocation`](/guide/topics/manifest/manifest-element#install) flag in your AndroidManifest.xml. For more information on enabling your app to be moved to external storage, see the Android guide on [App Install\n Location](/guide/topics/data/install-location).\n\n\u003cbr /\u003e\n\n### Reduce post-install app disk use\n\n\u003cbr /\u003e\n\n- Keeping your app's disk use low means that users are less likely to uninstall your app when the device is low on free space. It's important to apply bounds around your caches---this prevents your app's disk use from growing indefinitely. Be sure you put your cached data in [getCacheDir()](/reference/android/content/Context#getCacheDir())---the system can delete files placed here as needed, so they won't show up as storage committed to the app.\n\n\u003cbr /\u003e\n\nOffer configurable network use\n------------------------------\n\n\nThe Android platform includes a number of ways you can give the user control\nover your app's network use, optimizing it for their own needs. For example,\non first use, your app can walk the user through a variety of network-related settings.\nYou can also provide a network preferences screen from outside the app.\n\n### Provide onboarding experiences for users' network\nchoices\n\n\u003cbr /\u003e\n\n- Apps that allow users to reduce data use are well received, even if they have heavy data requirements. If your app uses a considerable amount of bandwidth (for example, video streaming apps), you can provide an onboarding experience for users to configure network use. For example, you could allow the user to force lower-bitrate video streams on cellular networks.\n- Additional settings for users to control data syncing, prefetching, and network use behavior (for example, prefetch all starred news categories on Wi-Fi only), also help users tailor your app's behavior to their needs.\n- For more information on managing network use, see the Android training on [Managing\n Network Usage](/training/basics/network-ops/managing).\n\n### Provide a network preferences\nscreen\n\n- You can navigate to the app's network settings from outside the app by means of a network preferences screen. You can invoke this screen from either the system settings screen or the system data usage screen.\n- To provide a network preferences screen that users can access from within your app as well as from the system settings, in your app include an activity that supports the [ACTION_MANAGE_NETWORK_USAGE](/reference/android/content/Intent#ACTION_MANAGE_NETWORK_USAGE) action.\n- For further information on adding a network preferences screen, see the Android training on [Implementing a Preferences Activity](/training/basics/network-ops/managing#prefs).\n\n\u003cbr /\u003e\n\nAdditional resources\n--------------------\n\nTo learn more about this topic, view the following additional resources:\n\n### Blog posts\n\n- [Nurture trust through cost transparency](https://medium.com/google-design/nurture-trust-through-cost-transparency-b61a5947d2fc)"]]