Réduction des coûts des données pour des milliards d'utilisateurs
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Dans certains pays, les forfaits de données peuvent représenter jusqu'à 10 % du revenu mensuel d'un utilisateur type. Cela signifie que la réduction de la taille de téléchargement de votre application et le fait de laisser l'utilisateur contrôler la façon dont votre application utilise les données peuvent avoir un impact important et tangible pour de nombreux utilisateurs. La réduction de la taille du téléchargement permet également d'économiser de l'espace dans la mémoire interne, qui est une ressource rare sur certains appareils.
Vous trouverez ici quelques stratégies pour vous aider à optimiser la quantité de données utilisées par votre application, à la fois sur le réseau et dans le stockage interne.
Réduire la taille des applis
Réduire la taille de votre application est l'un des moyens fondamentaux de permettre à vos utilisateurs de consommer moins de données, à la fois en termes de données réseau et de stockage interne. Cette section décrit plusieurs approches permettant de réduire la taille de l'application.
Réduire la taille des éléments graphiques de l'APK
- Les éléments graphiques sont souvent les principaux contributeurs à la taille de l'APK. L'optimisation de ces éléments peut entraîner des téléchargements plus petits et donc des temps d'installation plus rapides pour les utilisateurs.
- Pour les composants graphiques tels que les icônes, utilisez le format SVG (Scalable Vector Graphics). Les images SVG sont de petite taille par rapport aux graphiques bitmap et peuvent être affichées à n'importe quelle résolution lors de l'exécution. La bibliothèque Android Support fournit une implémentation rétrocompatible pour les ressources vectorielles sur Android 2.1 (niveau d'API 7).
Pour commencer à utiliser les vecteurs, consultez
cet article Medium.
- Pour les images non vectorielles, telles que les photos, utilisez WebP pour réduire les temps de chargement des images et économiser de la bande passante réseau. Le format WebP permet d'obtenir des fichiers plus petits que les formats PNG et JPG, tout en conservant au moins la même qualité d'image. Même avec des paramètres de compression avec perte, WebP peut produire une image presque identique à l'originale. Android inclut la prise en charge du format WebP avec pertes depuis Android 4.0 (niveau d'API 14 : Ice Cream Sandwich) et la prise en charge du format WebP sans perte et transparent depuis Android 4.2 (niveau d'API 17 : Jelly Bean).
- Si vous avez de nombreuses images volumineuses sur plusieurs densités, envisagez d'utiliser la compatibilité avec plusieurs fichiers APK pour diviser votre APK par densité. Cela permet de créer des versions ciblées pour des densités spécifiques. Ainsi, les utilisateurs disposant d'appareils à faible densité n'ont pas à télécharger des assets à haute densité inutilisés.
- Pour en savoir plus sur la réduction de la taille des APK, consultez Réduire la taille des APK et Réduire votre code et vos ressources. Vous trouverez également un guide détaillé sur la réduction de la taille des APK dans cette
série d'articles Medium.
Réduire la taille du code
- Chaque bibliothèque de votre projet Android ajoute du code potentiellement inutilisé à l'APK. Soyez particulièrement prudent lorsque vous utilisez des bibliothèques externes, car toutes ne sont pas conçues pour être utilisées dans des applications mobiles. Assurez-vous que les bibliothèques utilisées par votre application sont optimisées pour un usage mobile.
- Envisagez d'optimiser votre code compilé à l'aide d'un outil tel que ProGuard. ProGuard identifie le code inutilisé et le supprime de votre APK. De plus,
activez la réduction des ressources au moment de la compilation en définissant
minifyEnabled=true
sur shrinkResources=true
dans build.gradle
. Cela supprime automatiquement les ressources inutilisées de votre APK.
- Lorsque vous utilisez les services Google Play, vous devez
inclure de manière sélective uniquement les API nécessaires dans votre APK.
- Pour en savoir plus sur la réduction de la taille du code dans votre APK, consultez la formation Android sur la façon d'éviter les frameworks d'injection de dépendances.
Autoriser le déplacement de l'application vers un espace de stockage externe (carte SD)
- Les appareils à bas prix sont souvent dotés d'un espace de stockage intégré limité. Les utilisateurs peuvent étendre cette mémoire avec des cartes SD. Toutefois, les applications doivent déclarer explicitement qu'elles peuvent être installées sur un stockage externe avant que les utilisateurs puissent les déplacer.
- Autorisez l'installation de votre application sur un espace de stockage externe à l'aide de l'indicateur
android:installLocation
dans votre fichier AndroidManifest.xml. Pour en savoir plus sur l'activation du déplacement de votre application vers un espace de stockage externe, consultez le guide Android sur l'emplacement d'installation des applications.
Réduire l'utilisation du disque par l'application après l'installation
- En limitant l'utilisation du disque par votre application, vous réduisez le risque que les utilisateurs la désinstallent lorsque l'appareil manque d'espace libre. Il est important d'appliquer des limites à vos caches. Cela empêche l'utilisation du disque par votre application de croître indéfiniment. Veillez à placer vos données mises en cache dans
getCacheDir()
. Le système peut supprimer les fichiers placés ici selon les besoins. Ils n'apparaîtront donc pas comme de l'espace de stockage alloué à l'application.
Offrir une utilisation configurable du réseau
La plate-forme Android inclut plusieurs façons de donner à l'utilisateur le contrôle sur l'utilisation du réseau par votre application, en l'optimisant pour ses propres besoins. Par exemple, lors de la première utilisation, votre application peut guider l'utilisateur à travers différents paramètres liés au réseau.
Vous pouvez également fournir un écran de préférences réseau depuis l'extérieur de l'application.
Proposer des expériences d'intégration pour les choix de réseau des utilisateurs
- Les applications qui permettent aux utilisateurs de réduire leur consommation de données sont bien accueillies, même si elles ont des exigences élevées en termes de données. Si votre application utilise une quantité considérable de bande passante (par exemple, les applications de streaming vidéo), vous pouvez proposer une expérience d'intégration aux utilisateurs pour qu'ils configurent l'utilisation du réseau. Par exemple, vous pouvez autoriser l'utilisateur à forcer les flux vidéo à faible débit binaire sur les réseaux mobiles.
- Des paramètres supplémentaires permettent aux utilisateurs de contrôler la synchronisation des données, le préchargement et le comportement d'utilisation du réseau (par exemple, précharger toutes les catégories d'actualités étoilées uniquement en Wi-Fi). Ils peuvent ainsi adapter le comportement de votre application à leurs besoins.
- Pour en savoir plus sur la gestion de l'utilisation du réseau, consultez la formation Android sur la gestion de l'utilisation du réseau.
Fournir un écran de préférences réseau
- Vous pouvez accéder aux paramètres réseau de l'application depuis l'extérieur de l'application à l'aide d'un écran de préférences réseau. Vous pouvez accéder à cet écran depuis l'écran des paramètres système ou celui de l'utilisation des données système.
- Pour fournir un écran de préférences réseau auquel les utilisateurs peuvent accéder depuis votre application et depuis les paramètres système, incluez dans votre application une activité qui prend en charge l'action
ACTION_MANAGE_NETWORK_USAGE
.
- Pour en savoir plus sur l'ajout d'un écran de préférences réseau, consultez la formation Android sur l'
implémentation d'une activité de préférences.
Ressources supplémentaires
Pour en savoir plus à ce sujet, consultez les ressources supplémentaires suivantes :
Articles de blog
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/27 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 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)"]]