Снижение стоимости данных для миллиардов
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Тарифы на передачу данных в некоторых странах могут стоить более 10% ежемесячного дохода типичного пользователя. Это означает, что минимизация размера загрузки вашего приложения и предоставление пользователю возможности контролировать, как ваше приложение использует данные, может принести большую и ощутимую пользу многим пользователям. Минимизация размера загрузки также помогает сэкономить место во внутренней памяти, которая на некоторых устройствах является дефицитным ресурсом.
Здесь вы можете найти некоторые стратегии, которые помогут оптимизировать объем данных, которые ваше приложение использует как по сети, так и во внутреннем хранилище.
Уменьшить размер приложения
Уменьшение размера приложения — это один из основных способов помочь пользователю потреблять меньше данных как с точки зрения сетевых данных, так и с точки зрения внутреннего хранилища. В этом разделе описываются несколько подходов к уменьшению размера приложения.
Уменьшить размер графического ресурса APK
- Графические ресурсы часто вносят наибольший вклад в размер APK. Их оптимизация может привести к уменьшению количества загрузок и, следовательно, к сокращению времени установки для пользователей.
- Для графических ресурсов, таких как значки, используйте формат масштабируемой векторной графики (SVG). Изображения SVG имеют крошечный размер по сравнению с растровой графикой и могут отображаться во время выполнения с любым разрешением. Библиотека поддержки Android обеспечивает обратную совместимость реализации векторных ресурсов для Android 2.1 (уровень API 7). Начните работу с векторами, прочитав этот пост на Medium .
- Для невекторных изображений, таких как фотографии, используйте WebP , чтобы сократить время загрузки изображений и сэкономить пропускную способность сети. Доказано, что WebP обеспечивает меньший размер файлов, чем его аналоги PNG и JPG, при по крайней мере таком же качестве изображения. Даже при настройках с потерями WebP может создать изображение, почти идентичное оригиналу. В Android включена поддержка WebP с потерями начиная с Android 4.0 (уровень API 14: Ice Cream Sandwich) и поддержка прозрачного WebP без потерь с версии Android 4.2 (уровень API 17: Jelly Bean).
- Если у вас много больших изображений разной плотности, рассмотрите возможность использования поддержки нескольких APK , чтобы разделить APK по плотности. В результате создаются сборки, ориентированные на определенную плотность, а это означает, что пользователям устройств с низкой плотностью не придется нести штраф за загрузку неиспользуемых ресурсов с высокой плотностью.
- Дополнительную информацию об уменьшении размера APK см. в разделе «Уменьшение размера APK и сокращение кода и ресурсов» . Кроме того, вы можете найти подробное руководство по уменьшению размера APK в этой серии статей на Medium .
Уменьшить размер кода
- Каждая библиотека в вашем проекте Android добавляет в APK потенциально неиспользуемый код. Будьте особенно осторожны при использовании внешних библиотек, поскольку не все библиотеки предназначены для использования в мобильных приложениях. Убедитесь, что библиотеки, которые использует ваше приложение, оптимизированы для использования на мобильных устройствах.
- Рассмотрите возможность оптимизации скомпилированного кода с помощью такого инструмента, как ProGuard . ProGuard идентифицирует код, который не используется, и удаляет его из вашего APK. Также включите сжатие ресурсов во время сборки, установив
minifyEnabled=true
, shrinkResources=true
в build.gradle
— это автоматически удалит неиспользуемые ресурсы из вашего APK. - При использовании сервисов Google Play вам следует выборочно включать в APK только необходимые API.
- Дополнительную информацию об уменьшении размера кода в APK см. в обучении Android о том, как избежать фреймворков внедрения зависимостей .
Разрешить перемещение приложения на внешнее хранилище (SD)
- Недорогие устройства часто имеют мало встроенной памяти. Пользователи могут расширить это с помощью SD-карт; однако приложениям необходимо явно заявить, что они поддерживают установку на внешнее хранилище, прежде чем пользователи смогут их переместить.
- Разрешите установку вашего приложения во внешнее хранилище с помощью флага
android:installLocation
в вашем AndroidManifest.xml. Дополнительную информацию о том, как разрешить перемещение вашего приложения на внешнее хранилище, см. в руководстве Android по месту установки приложения .
Уменьшите использование диска приложения после установки.
- Сохранение низкого использования диска вашим приложением означает, что пользователи с меньшей вероятностью удалят ваше приложение, когда на устройстве мало свободного места. Важно применять ограничения к вашим кешам — это предотвращает бесконечный рост использования диска вашим приложением. Обязательно поместите кэшированные данные в
getCacheDir()
— система может удалять файлы, размещенные здесь, по мере необходимости, поэтому они не будут отображаться как хранилище, выделенное приложению.
Предлагайте настраиваемое использование сети
Платформа Android включает в себя ряд способов предоставить пользователю контроль над использованием сети вашим приложением, оптимизируя его для своих нужд. Например, при первом использовании ваше приложение может помочь пользователю выполнить различные настройки, связанные с сетью. Вы также можете открыть экран сетевых настроек вне приложения.
Обеспечьте ознакомление с выбором сети для пользователей.
- Приложения, которые позволяют пользователям сократить использование данных, хорошо принимаются, даже если у них высокие требования к данным. Если ваше приложение использует значительную часть пропускной способности (например, приложения для потоковой передачи видео), вы можете предоставить пользователям возможность настройки использования сети. Например, вы можете разрешить пользователю принудительно передавать видеопотоки с более низким битрейтом в сотовые сети.
- Дополнительные настройки для пользователей, позволяющие управлять синхронизацией данных, предварительной загрузкой и поведением при использовании сети (например, предварительная загрузка всех помеченных категорий новостей только по Wi-Fi), также помогают пользователям адаптировать поведение вашего приложения к своим потребностям.
- Дополнительную информацию об управлении использованием сети см. в обучающем курсе Android «Управление использованием сети» .
Предоставить экран сетевых настроек
- Вы можете перейти к сетевым настройкам приложения извне приложения с помощью экрана сетевых настроек. Вы можете вызвать этот экран либо с экрана настроек системы, либо с экрана использования системных данных.
- Чтобы предоставить экран сетевых настроек, к которому пользователи смогут получить доступ как из вашего приложения, так и из настроек системы, включите в свое приложение действие, поддерживающее действие
ACTION_MANAGE_NETWORK_USAGE
. - Дополнительную информацию о добавлении экрана сетевых настроек см. в обучении Android по реализации действий с настройками .
Дополнительные ресурсы
Чтобы узнать больше по этой теме, просмотрите следующие дополнительные ресурсы:
Сообщения в блоге
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-07-29 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-07-29 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)"]]