Cómo reducir los costos de datos para miles de millones de usuarios
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
En algunos países, el costo de los planes de datos puede superar el 10% del ingreso mensual de un usuario promedio. Esto significa que minimizar el tamaño de descarga de tu app y permitir que el usuario controle cómo esta utiliza los datos puede implicar un beneficio grande y tangible para muchos usuarios. Minimizar el tamaño de las descargas también ayuda a ahorrar espacio en el almacenamiento interno, que es un recurso escaso en algunos dispositivos.
Aquí encontrarás algunas estrategias para optimizar la cantidad de datos que utiliza tu app, tanto en la red como en el almacenamiento interno.
Reduce el tamaño de la app
Reducir el tamaño de las apps es una de las principales formas en las que puedes ayudar a los usuarios a consumir menos datos, tanto en términos de datos de red como de almacenamiento interno. En esta sección, se describen varios enfoques con el fin de reducir el tamaño de las apps.
Reduce el tamaño de los elementos gráficos del APK
- A menudo, los recursos gráficos son los que más contribuyen al tamaño del APK. La optimización de estos elementos puede dar como resultado descargas más pequeñas y, en consecuencia, menores tiempos de instalación para los usuarios.
- Para recursos gráficos como los íconos, utiliza el formato de Gráficos vectoriales escalables (SVG). Las imágenes SVG son muy pequeñas en comparación con los gráficos de mapas de bits y se pueden renderizar durante el tiempo de ejecución en cualquier resolución. La biblioteca de compatibilidad de Android proporciona una implementación de recursos vectoriales retrocompatible hasta Android 2.1 (nivel de API 7).
Consulta esta publicación de Medium a fin de comenzar a trabajar con vectores.
- Para imágenes no vectoriales, como las fotos, usa WebP a efectos de reducir los tiempos de carga de imágenes y ahorrar ancho de banda de red. Está comprobado que WebP permite obtener archivos más pequeños que sus contrapartes PNG y JPG, y tiene una calidad de imagen igual o superior. Incluso en configuraciones con pérdida, WebP puede producir una imagen casi idéntica a la original. Android incluye compatibilidad con WebP con pérdida desde Android 4.0 (nivel de API 14: Ice Cream Sandwich) y compatibilidad con WebP transparente y sin pérdida desde Android 4.2 (nivel de API 17: Jelly Bean).
- Si tienes muchas imágenes grandes con diferentes densidades, considera usar la compatibilidad con varios APK para dividir tu APK según la densidad. Como resultado, obtendrás compilaciones orientadas a densidades específicas, lo cual significa que los usuarios con dispositivos de baja densidad no tendrán que descargar recursos de alta densidad que no usarán.
- Si deseas obtener más información para disminuir el tamaño del APK, consulta Cómo reducir el tamaño del APK y Cómo reducir tu código y los recursos. Además, puedes encontrar una guía detallada para disminuir el tamaño del APK en esta serie de publicaciones de Medium.
Reduce el tamaño del código
- Cada biblioteca de tu proyecto de Android agrega al APK código que posiblemente no se use. Ten especial cuidado cuando utilices bibliotecas externas, ya que no todas pueden usarse en apps para dispositivos móviles. Verifica que las bibliotecas que utiliza tu app estén optimizadas para su uso en dispositivos móviles.
- Una buena idea es optimizar el código compilado mediante alguna herramienta, como ProGuard. ProGuard identifica el código que no se usa y lo quita del APK. Además, puedes habilitar la reducción de recursos en el tiempo de compilación si estableces
minifyEnabled=true
y shrinkResources=true
en build.gradle
. De esta forma, se quitarán automáticamente de tu APK los recursos no utilizados.
- Cuando uses los Servicios de Google Play, deberás incluir de forma selectiva solo las API necesarias en tu APK.
- Si deseas obtener más información para disminuir el tamaño del código de tu APK, consulta la capacitación de Android acerca de cómo evitar frameworks de inserción de dependencias.
Permite que la app se pueda mover a un almacenamiento externo (SD)
- A menudo, los dispositivos de bajo costo cuentan con poco almacenamiento integrado. Los usuarios pueden ampliarlo con tarjetas SD; sin embargo, las apps deben declarar explícitamente que admiten instalaciones en almacenamiento externo antes de que los usuarios puedan moverlas.
- Permite que tu app se instale en almacenamientos externos usando la marca
android:installLocation
en el AndroidManifest.xml. Si deseas obtener más información para permitir que tu app se pueda mover a un almacenamiento externo, consulta la guía de Android sobre la ubicación de instalación de las apps.
Reduce el uso de disco de tu app tras la instalación
- Si tu app ocupa poco espacio en disco, será menos probable que los usuarios la desinstalen cuando su dispositivo tenga poco espacio libre. Es importante que establezcas límites en las cachés. De esta forma, evitarás que el uso de disco por parte de la app crezca indefinidamente. Asegúrate de colocar los datos almacenados en caché en
getCacheDir()
. El sistema puede borrar los archivos que se encuentren en esta ubicación según sea necesario, por lo que no se mostrarán como almacenamiento destinado a la app.
Ofrece uso de red configurable
La plataforma de Android incluye varias formas de otorgar al usuario control sobre el uso de la red por parte de tu app y la optimiza según sus propias necesidades. Por ejemplo, en el primer uso, tu app puede guiar al usuario a través de una variedad de configuraciones relacionadas con la red.
También puedes proporcionar una pantalla de preferencias de red desde fuera de la app.
Incluye experiencias de integración para las opciones de red de los usuarios
- Las apps que les permiten a los usuarios disminuir el uso de datos son bien vistas, incluso si requieren grandes cantidades de datos. Si tu app consume un ancho de banda considerable (por ejemplo, las apps de streaming de videos), puedes ofrecer una experiencia de integración a fin de que los usuarios configuren el uso de la red. Por ejemplo, puedes permitir que el usuario fuerce la transmisión de video por Internet con baja tasa de bits si se trata de una red móvil.
- Otras configuraciones para que los usuarios controlen la sincronización de datos, la carga previa y el comportamiento de uso de la red (por ejemplo, cargar previamente todas las categorías destacadas de noticias solo cuando se esté usando una red Wi-Fi) también ayudan a los usuarios a personalizar el comportamiento de la app según sus necesidades.
- Si deseas obtener más información para administrar el uso de la red, consulta la capacitación de Android sobre la administración del uso de red.
Proporciona una pantalla de preferencias de red
- Mediante una pantalla de preferencias de red, puedes navegar a la configuración de red de la app sin necesidad de entrar en ella. Puedes invocar esta pantalla desde la pantalla de configuración del sistema o la de uso de datos del sistema.
- Para proporcionar una pantalla de preferencias de la red a la cual los usuarios puedan acceder tanto desde la app como desde la configuración del sistema, incluye una actividad en tu app que admita la acción
ACTION_MANAGE_NETWORK_USAGE
.
- Si deseas obtener más información para agregar una pantalla con preferencias de red, consulta la capacitación de Android sobre la implementación de una actividad de preferencias.
Recursos adicionales
Para obtener más información sobre este tema, consulta los siguientes recursos adicionales:
Entradas de blog
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-07-27 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 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)"]]