Custo de dados reduzido para bilhões
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Em alguns países, os planos de dados podem custar mais de 10% da renda mensal do usuário. Isso
significa que minimizar o tamanho de download do seu app e permitir que o usuário controle como ele usa
dados pode gerar um benefício grande e tangível. Minimizar o tamanho do download também ajuda
a poupar espaço no armazenamento interno, que é um recurso escasso em alguns dispositivos.
Aqui, você encontra algumas estratégias para otimizar a quantidade de dados usados pelo app, tanto
na rede quanto no armazenamento interno.
Reduzir o tamanho do app
A redução do tamanho do app é uma das maneiras fundamentais de ajudar o usuário a consumir menos dados, seja na
rede ou no armazenamento interno. Esta seção descreve várias abordagens para
reduzir o tamanho do app.
Reduzir o tamanho de recursos gráficos do APK
- Com frequência, os recursos gráficos são os maiores culpados pelo tamanho do
APK. A otimização deles pode resultar em downloads menores e, com isso, tempos de instalação
mais rápidos para os usuários.
- Para recursos gráficos como ícones, use o formato Elementos gráficos vetoriais escaláveis
(SVG). As imagens SVG são muito pequenas quando comparadas a gráficos em bitmap e podem ser renderizadas no
momento da execução em qualquer resolução. A Biblioteca de Suporte do Android
fornece uma implementação compatível com versões anteriores para recursos vetoriais no Android 2.1 (API de nível 7).
Saiba mais sobre os vetores com
esta postagem no Medium (em inglês).
- Para imagens não vetoriais, como fotos, use o WebP para reduzir
os tempos de carregamento de imagem e economizar largura de banda da rede. O formato WebP resulta em
tamanhos de arquivo menores do que os formatos PNG e JPG, com uma
qualidade de imagem equivalente. Mesmo em configurações com perda, o WebP pode produzir uma
imagem quase idêntica à original. O Android inclui a compatibilidade com WebP com perda desde a versão 4.0 (API
de nível 14: Ice Cream Sandwich) e com o WebP transparente sem perda
desde o Android 4.2 (API de nível 17: Jelly Bean).
- Se você tiver diversas imagens grandes com muitas densidades, recomendamos
usar a compatibilidade com vários APKs para dividir seu APK por densidade. Isso resulta em builds
direcionados a densidades específicas, o que significa que os usuários com dispositivos com baixa densidade
não precisarão se preocupar com o download de recursos de alta densidade não usados.
- Para saber mais sobre como diminuir o tamanho do APK, consulte
Reduzir o tamanho do APK e
Reduzir seu código e seus recursos. Além disso, você pode
encontrar um guia detalhado sobre como reduzir o tamanho do APK nesta
série de postagens no Medium (em inglês).
Reduzir o tamanho do código
- Todas as bibliotecas do seu projeto Android adicionam códigos não usados ao APK. Tenha
um cuidado especial ao usar bibliotecas externas, porque nem todas elas são
projetadas para uso em apps para dispositivos móveis. As bibliotecas aplicadas pelo seu app precisam ser
otimizadas para uso em dispositivos móveis.
- Recomendamos que você otimize seu código compilado usando uma ferramenta como o ProGuard. O ProGuard identifica
códigos que não estão sendo usados e os remove do APK. Além disso,
ative a redução de recursos (link em inglês) no momento da compilação configurando
minifyEnabled=true
e shrinkResources=true
em
build.gradle
. Isso remove automaticamente os recursos não usados do
seu APK.
- Ao usar o Google Play Services,
inclua seletivamente no APK apenas as APIs necessárias.
- Para saber mais sobre como reduzir o tamanho do código no seu APK, acesse o
treinamento do Android sobre como Evitar
frameworks de injeção de dependência.
Permitir que o app seja movido para o armazenamento externo (SD)
- Com frequência, os dispositivos de baixo custo têm pouco armazenamento interno. Os usuários podem
aumentar esse armazenamento com cartões SD, mas os apps precisam declarar explicitamente que
oferecem compatibilidade com a instalação em armazenamento externo para que os usuários possam movê-los.
- Permita que seu app seja instalado no armazenamento externo usando a sinalização
android:installLocation
no AndroidManifest.xml. Para saber mais
sobre como permitir que seu app seja movido para o armazenamento externo, acesse o
guia do Android sobre o Local da instalação
do app.
Reduzir o uso de disco pelo app após a instalação
- Manter o uso de disco pelo seu app baixo significa que os usuários terão menos probabilidade de
desinstalá-lo quando o espaço livre do dispositivo estiver acabando. É importante,
aplicar limites para seus caches, evitando que o uso de disco pelo app
aumente indefinidamente. Coloque seus dados armazenados em cache em
getCacheDir()
. O sistema pode excluir os arquivos
colocados nesse local conforme necessário, então eles não serão mostrados como armazenamento ocupado pelo
app.
Oferecer um uso de rede configurável
A Plataforma Android inclui várias maneiras de oferecer ao usuário o controle
sobre o uso da rede pelo app, otimizando-o para as necessidades individuais. Por exemplo,
quando for usado pela primeira vez, o app poderá orientar o usuário sobre várias configurações relacionadas à rede.
Você também pode fornecer uma tela de preferências de rede fora do app.
Oferecer experiências de integração para as escolhas de rede
dos usuários
- Apps que permitem que os usuários reduzam o uso de dados são bem recebidos, mesmo que
tenham requisitos de dados pesados. Caso seu app use uma quantidade considerável
de largura de banda (por exemplo, apps de streaming de vídeos), é possível fornecer uma
experiência de integração para que os usuários configurem o uso da rede. Por exemplo,
você pode permitir que o usuário force streams de vídeo com taxas de bits menores em
redes celulares.
- Configurações extras que permitam que os usuários controlem a sincronização de dados, a pré-busca de dados e o
comportamento de uso da rede (por exemplo, pré-buscar todas as categorias de notícias marcadas com estrela
apenas por Wi-Fi) também ajudam os usuários a adaptarem o comportamento do app de acordo com as necessidades deles.
- Para saber mais sobre como gerenciar o uso da rede, consulte o treinamento do Android
sobre como Gerenciar
o uso da rede.
Fornecer uma tela de preferências
de rede
- Você pode navegar para a tela de configurações de rede fora do app por
uma tela de preferências de rede. Essa tela pode ser invocada
da tela de configurações do sistema ou da de uso de dados do sistema.
- Para fornecer uma tela de preferências de rede que os usuários possam acessar de dentro
do seu app e pelas configurações do sistema, inclua no app uma
atividade que tenha compatibilidade com a ação
ACTION_MANAGE_NETWORK_USAGE
.
- Para saber mais sobre como adicionar uma tela de preferências de rede, consulte o
treinamento do Android sobre como
Implementar uma atividade de preferência.
Outros recursos
Para saber mais sobre esse assunto, consulte os recursos a seguir:
Postagens do blog
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-27 UTC.
[null,null,["Última atualização 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)"]]