Снижение стоимости трафика для миллиардов пользователей

В некоторых странах стоимость тарифных планов на мобильный интернет может превышать 10% от среднемесячного дохода пользователя. Это означает, что уменьшение размера скачиваемого приложения и предоставление пользователю возможности контролировать, как приложение использует данные, может принести большую и ощутимую пользу многим пользователям. Минимизация размера скачиваемых файлов также помогает экономить место во внутренней памяти, которая на некоторых устройствах ограничена.

В этой статье вы найдете несколько стратегий, которые помогут оптимизировать объем данных, используемых вашим приложением как в сети, так и во внутреннем хранилище.

Уменьшите размер приложения

Уменьшение размера приложения – один из основных способов снизить потребление трафика и объем занимаемой памяти. В этом разделе описывается несколько подходов к уменьшению размера приложения.

Уменьшите размер графических объектов в APK-файле

  • Графические объекты часто занимают больше всего места в APK-файле. Оптимизация этих файлов позволяет уменьшить размер скачиваемых данных и ускорить установку.
  • Для графических объектов, например значков, используйте формат SVG. Изображения в формате SVG имеют небольшой размер по сравнению с растровой графикой и могут отображаться во время выполнения с любым разрешением. Библиотека поддержки Android обеспечивает обратную совместимость векторных ресурсов с Android 2.1 (уровень API 7). Чтобы узнать больше о векторах, прочитайте эту статью на Medium.
  • Для не векторных изображений, например фотографий, используйте формат WebP, чтобы сократить время загрузки и сэкономить пропускную способность сети. Доказано, что файлы WebP меньше, чем PNG и JPG, но качество изображений при этом не страдает. Даже при сжатии с потерями WebP может создавать изображение, почти идентичное оригиналу. Поддержка формата WebP с потерями появилась в Android 4.0 (уровень API 14: Ice Cream Sandwich), а без потерь и с прозрачностью – в Android 4.2 (уровень API 17: Jelly Bean).
  • Если у вас много больших изображений с разной плотностью, попробуйте использовать поддержку нескольких APK, чтобы разделить APK по плотности. В результате создаются сборки, предназначенные для экранов с определенной плотностью пикселей. Это значит, что пользователям устройств с низкой плотностью пикселей не придется скачивать неиспользуемые объекты, предназначенные для экранов с высокой плотностью пикселей.
  • Подробнее о том, как уменьшить размер APK-файла, рассказывается в статьях Reduce APK Size (Уменьшение размера APK-файла) и Shrink Your Code and Resources (Сокращение кода и ресурсов). Кроме того, вы можете ознакомиться с подробным руководством по уменьшению размера APK-файлов в серии статей на платформе Medium.

Уменьшите размер кода

  • Каждая библиотека в проекте для Android добавляет в APK потенциально неиспользуемый код. Будьте особенно осторожны при использовании внешних библиотек, поскольку не все они предназначены для мобильных приложений. Убедитесь, что библиотеки, которые использует ваше приложение, оптимизированы для мобильных устройств.
  • Попробуйте оптимизировать скомпилированный код с помощью такого инструмента, как ProGuard. ProGuard находит неиспользуемый код и удаляет его из APK-файла. Также включите удаление неиспользуемых ресурсов во время сборки, задав minifyEnabled=true, shrinkResources=true в build.gradle. Это позволит автоматически удалять неиспользуемые ресурсы из APK.
  • При использовании сервисов Google Play следует выборочно включать в APK только необходимые API.
  • Подробнее о том, как уменьшить размер кода в APK-файле, рассказывается в учебном материале Android Avoid dependency injection frameworks (Как избежать использования фреймворков внедрения зависимостей).

Разрешить перенос приложения на внешний накопитель (SD-карту)

  • Недорогие устройства часто имеют небольшой объем памяти. Пользователи могут расширить ее с помощью SD-карт, однако приложения должны явно заявлять о поддержке установки на внешнее хранилище, прежде чем пользователи смогут их переместить.
  • Разрешите установку приложения на внешнее хранилище, используя флаг android:installLocation в файле AndroidManifest.xml. Подробнее о том, как разрешить перенос приложения на внешний накопитель…

Уменьшите объем памяти, занимаемый приложением после установки

  • Если приложение занимает мало места на диске, пользователи с меньшей вероятностью удалят его, когда на устройстве закончится свободное пространство. Важно ограничить размер кеша, чтобы приложение не занимало слишком много места на диске. Кешированные данные следует помещать в каталог getCacheDir(). Система может удалять файлы из этого каталога по мере необходимости, поэтому они не будут учитываться как хранилище, выделенное для приложения.

Предлагайте настраиваемое использование сети

Платформа Android предлагает несколько способов, позволяющих пользователю контролировать использование сети приложением и оптимизировать его в соответствии со своими потребностями. Например, при первом запуске приложение может предложить пользователю настроить различные параметры сети. Вы также можете предоставить экран настроек сети за пределами приложения.

Предоставьте пользователям возможность выбора сети

  • Пользователи хорошо принимают приложения, которые позволяют сократить потребление трафика, даже если они требуют большого объема данных. Если ваше приложение использует значительный объем трафика (например, стриминговые сервисы), вы можете предоставить пользователям возможность настроить использование сети. Например, вы можете разрешить пользователю принудительно снижать битрейт видеопотоков в мобильных сетях.
  • Дополнительные настройки для управления синхронизацией данных, предварительной выборкой и использованием сети (например, предварительная выборка всех помеченных звездочкой категорий новостей только по Wi-Fi) также помогают пользователям адаптировать поведение вашего приложения к своим потребностям.
  • Дополнительную информацию об управлении использованием сети можно найти в руководстве по Android Managing Network Usage (Управление использованием сети).

Предоставьте экран настроек сети

  • Перейти к настройкам сети приложения можно извне, используя экран настроек сети. Этот экран можно вызвать из системных настроек или экрана использования данных.
  • Чтобы предоставить пользователям доступ к экрану настроек сети из приложения и системных настроек, добавьте в приложение действие, поддерживающее ACTION_MANAGE_NETWORK_USAGE.
  • Подробную информацию о том, как добавить экран настроек сети, можно найти в руководстве по Android Реализация Activity настроек.

Дополнительные ресурсы

Дополнительную информацию по этой теме можно найти в следующих ресурсах:

Записи в блоге