Как сжать программы на Андроид

Содержание

Было больно, но оно того стоило. Размер приложения имеет значение, и я не мог оставить все как есть теперь, когда обнаружил свою ошибку.

7 месяцев назад

Этим летом я заметил, что мое приложение набрало вес, но я не был уверен, что вызвало это и как это выяснить.

Последние результаты на iPhone 14 Pro были такими:

App size: 71,8 MB compressed, 82,4 MB uncompressed

Это много для приложения, которое изначально весило около 8 Мб (если я правильно помню…). С тех пор я добавил много коров, а также два расширения (виджет и уведомления), но все равно это увеличение не показалось мне правильным.

Ассеты являются общими для приложения, виджета и уведомлений, но файл Assets.car дублируется для каждого из них. Таким образом, любой такой файл занимает в приложении iPhone в 3 раза больше места, чем сам файл.

Благодаря моему другу Акселю я научился открывать файлы Assets.car с помощью iOS Images Extractor.

Все мои коровы — это универсальные PDF-файлы, но Xcode генерирует из них 3 PNG. Вот почему некоторые люди перестали использовать PDF-файлы.

как сжать фото файл без потери качества на смартфоне андроид!

Изучив файл Assets.car, я увидел, что самые тяжелые изображения принадлежали этой корове:

Как я уменьшил размер моего приложения на 73%

Поскольку в Xcode 12 добавлена поддержка файлов SVG, я решил попробовать.

App size: 78,1 MB compressed, 88,9 MB uncompressed

Затем я попробовал другой подход, который мне предложили — я создал Swift Package «CowsKit» только с этим ассетом.

К сожалению, как и в случае с Assets.car, пакет дублируется во всех таргетах, которым он нужен, как показано на этом изображении моего расширения уведомлений.

Как я уменьшил размер моего приложения на 73%

Я вернулся к своему файлу и изменил размер Artboard на 400ptx300pt вместо 800ptx600pt.

App size: 70,9 MB compressed, 81,5 MB uncompressed

Это было обнадеживающе. Мне стало любопытно, и я сделал еще одну попытку с разрешением 80ptx60pt.

App size: 70,3 MB compressed, 80,8 MB uncompressed

Это на 1.5 Мб меньше всего с одним файлом. А так как это векторный файл, я могу отобразить корову на весь экран, и качество будет таким же.

Я не мог в это поверить. Я подумал, что:

  • Рендеринг будет медленным (проверил — на iPhone 6s масштабирование было незаметным).
  • Возможно, было задействовано некоторое кеширование, и каким-то образом сборка все еще использовала старый актив.

Для этого второго пункта я сделал две проверки:

  • Экспорт: я заархивировал свою сборку, экспортировал с помощью app thinning и открыл Assets.car, чтобы найти свой файл.
  • Я закомментировал код, который изменяет размеры изображений. Вот что убедило меня, что я не сплю. Как вы можете видеть ниже, слева находится PDF-файл с базовым размером 80×60 пикселей, а справа — с размером 800×600 пикселей.

3

Как уменьшить размер Android приложения

4

Я знал, что должен сделать, хотя очень не хотел этого делать, потому что это была бы кропотливая работа.

Результат

После нескольких часов повторной обработки изображений мне не терпелось увидеть результат.

App size: 21,2 MB compressed, 32,2 MB uncompressed

С 71.8 Мб до 21.2 Мб для iPhone 14 Pro.

Дополнительно

Я использовал iOS Image Extractor и DaisyDisk для проверки файла Assets.car и обнаружил еще несколько вещей, которые можно было бы улучшить:

  • Я преобразовал некоторые файлы из PNG в PDF
  • Я попытался быть умным и преобразовал PNG фотографии в JPG… но Xcode все равно сгенерировал PNG, и приложение набрало 2 Мб, поэтому я отменил это
  • Я масштабировал иконки социальных сетей (Instagram, Reddit, Twitter…)
  • Убрал неиспользуемые ассеты (весили немного, но все равно трата)
  • Я исключил «дубликаты» — 5 изображений были включены дважды, потому что была версия с полями и версия без полей…

Это сэкономило мне еще 2 МБ:

App size: 19,3 MB compressed, 30,6 MB uncompressed

Обновление иконок моих приложений для поддержки новых размеров

К этому моменту мои иконки все еще использовали All Sizes (Xcode 13), что означало, что мне не хватало некоторых размеров.

Я воссоздал иконки для моих 99 альтернативных иконок и для основной и создал новый экспорт.

App size: 29,1 MB compressed, 41,2 MB uncompressed

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

Я подготовил новый архив:

App size: 22,2 MB compressed, 33,4 MB uncompressed

Оказывается, Single Size Icon не так уж и плох! Единственная причина, по которой мой результат был разочаровывающим, заключается в том, что мое сравнение было несправедливым, поскольку параметр Single Size обрабатывал больше размеров, чем моя существующая конфигурация (All Sizes в Xcode 13).

Сравнение размеров файлов в App Store

Последним шагом для меня было сравнение размеров файлов в App Store Connect.

Вы можете получить к ним доступ на вкладке Testflight:

  • Выберите свою сборку
  • Нажмите Build Metadata.
  • Найдите Compressed File Size и нажмите App Store File Sizes.

Вот скриншоты до/после. Результат чертовски радует.

5

6

Вывод

Было больно, но оно того стоило. Размер приложения имеет значение, и я не мог оставить все как есть теперь, когда обнаружил свою ошибку.

По-видимому, правила, по которым нужно жить, таковы:

  • Используйте PDF/SVG и установите флажок «Preserve Vector Data».
  • Используете JPG? Xcode, похоже, в любом случае генерирует PNG, вам будет лучше, если вы оптимизируете его самостоятельно.
  • Если вы используете PDF-файлы (или SVG), убедитесь, что исходный размер подходит и что это не приводит к тому, что Xcode создаст абсурдно большие PNG.
  • Xcode оптимизирует (pngcrush) ваши файлы (и дух), поэтому может быть бесполезно оптимизировать ваши файлы с помощью таких инструментов, как ImageOptim (прочитайте это или это).
  • Для значков приложений хорошей идеей (по моему опыту) является использование Single Size в Xcode.

Источник: apptractor.ru

Как уменьшить размер приложений для Android во время разработки

Как уменьшить размер приложений для Android во время разработки

С ростом цифровизации к мобильным устройствам и мобильным приложениям, которые мы используем в повседневной жизни, предъявляются все более высокие требования. Объем мобильного хранилища увеличился до 256 ГБ, и он обязательно увеличится, поскольку мы удовлетворяем потребности клиентов, добавляем новые функции и поддерживаем приложения на экранах разных размеров.

Согласно отчету, 74% людей в мире используют Android, и около 70% пользователей смотрят размер приложения перед его установкой.

И, к нашему удивлению, 70 % людей на развивающихся рынках обращают внимание на размер приложения, потому что их беспокоит стоимость данных. и место для хранения телефона?

Поскольку вы читаете эту статью, у вас есть две возможности. Либо вы обычный пользователь (читатель), который сталкивается с этой проблемой, как и я, либо нанимаете разработчика приложений для Android, который может не позволить пользователям столкнуться с этой проблемой, просто уменьшив количество приложений для Android в течение жизненного цикла разработки приложений для Android.

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

Читайте также:
Как запустить файл с помощью другой программы

Размер Android-приложения имеет значение

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

Но знаете почему? Каковы реальные причины этого? Что ж, мы выяснили, что согласно отчету Google, если размер приложения превышает 150 МБ, , который ранее составлял 100 МБ, шансы на его установку снизятся на 30%. Кроме того, при увеличении размера на каждые 6 МБ установка коэффициент конверсии может снизиться на 1 %.

Согласно исследованию, 65% людей не будут устанавливать приложение, если узнают, что оно слишком большое. Они будут избегать таких приложений из-за большого потребления интернет-данных, а также занимают больше места.

Теперь Google придумал лучшее решение. Он придумал Android App Bundle, и это позволяет вам устанавливать приложения, даже не загружая основные элементы, которые в любом случае присутствуют в других приложениях в Play Store, что помогает уменьшить размер почти на 35%, по мнению Google.

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

Итак, теперь давайте посмотрим, как уменьшить размер приложения для Android или размер APK во время разработки приложения для Android.

1. Используйте Android App Bundle, чтобы уменьшить размер приложения

Когда вы разработали приложение для Android и готовы выпустить его, вам нужно выбрать между APK и Android App Bundle. Android App Bundle заставит Google Play создать APK только для тех конкретных пользователей, которым требуются функции.

Набор приложений для Android

  • Для формата публикации, состоящего из скомпилированного кода и ресурсов вашего приложения, используется Android App Bundle, который задерживает создание APK и подписание в Google Play.
  • Для Android App Bundle ограничение на размер сжатой загрузки – 150 МБ. Комплект приложений нельзя использовать с файлами расширения APK.

2. Используйте Proguard

Чтобы уменьшить размер APK вашего приложения, Proguard, вероятно, является одним из самых полезных инструментов. Это напрямую уменьшит файлы исходного кода до минимума и может уменьшить размер файла APK до 90%.

  • Всякий раз, когда вы используете «Proguard, попробуйте использовать все варианты».
  • Proguard помогает избежать разногласий по поводу сгенерированного APK или пакета, если он используется во всех вариантах при разработке.
  • ProGuard не может переименовывать или удалять любые поля в этих классах данных, поскольку они должны соответствовать сериализованному формату.

3. Используйте плагин Android Size Analyzer

Чтобы значительно уменьшить размер вашего приложения для Android, вы можете использовать плагин Android Studio. С APK Analyzer разработчики Android могут выполнять следующие действия:

  • Просмотрите полный и сравнительный размер APK.
  • Знайте состав файлов DEX.
  • Быстрый просмотр окончательных версий файлов в APK, таких как файл AndroidManifest.xml.
  • Проведите параллельное сравнение двух APK.

4. Оптимизация изображения

Изображения с более высоким разрешением всегда являются лучшим и первым выбором для привлечения пользователей на сайт. Поскольку новейшее мобильное устройство поставляется с камерой с хорошим разрешением, размер изображения также можно было бы уменьшить, разбавив разрешение. В случае, если вы не хотите терять качество изображения, вам необходимо преобразовать изображения .jpg или .png в .webp.

Использование изображений без уменьшения размера может повлиять на качество приложения. Вместо того, чтобы загружать или использовать исходное изображение в своем приложении, преобразуйте изображения .jpg и .png в веб-формат. Для файлов png вы также можете использовать такие инструменты, как pngcrush или Zopflipng. Для файлов jpg вы можете использовать такие инструменты, как packJPG и Guetzli. Вы также можете использовать векторную графику, поскольку она делает изображение простым и использует пространство.

Это факт, что изображения могут творить чудеса без статических ресурсов. Во время выполнения фреймворка достаточно для динамического рисования таких изображений. Кроме того, использование объектов Vector Drawables — отличная идея при создании небольших приложений.

Поскольку эти приложения могут занимать минимальное место в файле APK и создавать изображения, соответствующие правилам дизайна материалов, использование Vector Drawables является ценным. Следует также позаботиться о спорах, которые могут возникнуть в связи с использованием ЦП и ОЗУ в качестве сложных объектов.

5. Поддержка определенных плотностей экрана

Чтобы уменьшить размер приложения для Android, правильное использование определенной плотности экрана — еще один отличный вариант. Существует миллион устройств на базе Android с различной плотностью экрана. Тем не менее, мы не используем всю плотность экрана и можем исключить то, что не требуется.

Чтобы отказаться от объединения всех неиспользуемых плотностей экрана в ваше приложение, проанализируйте, чтобы определить процент пользователей с устройствами с определенной плотностью. Если это процентное соотношение незначительно, у вас есть причина устранить их и уменьшить размер вашего приложения.

6. Удаление мертвого кода

Размер APK-файла напрямую связан со скоростью загрузки вашего приложения, занимаемой им памятью и потребляемой мощностью. Таким образом, любой неиспользуемый или неподходящий код, оставленный ради сохранения, только добавит мусора. Вот почему удаление неработающего кода или удаление кода необходимо для того, чтобы ваше приложение оставалось активным и активным все время, весь день.

Это удаление кода повысит качество исходного кода и уменьшит необходимость поддерживать размер кода, что в целом покажет здоровое приложение.

7. Повторно используйте свой ресурс

Повторное использование действительно лучше и проще, чем удаление. Это удивительный способ использовать свои ресурсы по-разному. Это обеспечивает плавную прокрутку. Это может помочь вам уменьшить окончательный размер вашего Android APK. Вы можете исключить те ресурсы, которые представляют собой только вращающийся эквивалент другого ресурса.

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

8. Поддержка нескольких файлов APK

Некоторые APK состоят из контента, который загружается, но практически не используется. Например, надстройки вроде дополнительных языков не всегда нужны, однако скачиваются абы как. Это занимает дополнительные места в вашем хранилище и увеличивает приложение.

Однако эта проблема заставила разработчика задуматься над поиском лучших решений для загрузки только определенных частей приложения, полезных для пользователей. К сожалению, загрузить полезную часть APK невозможно.

Но чтобы оно работало ближе к этим решениям, вы можете загрузить приложение через магазин Google Play через Android App Bundle, который позволяет Google включать оптимизированные APK на основе конфигурации устройства. Для этого вы можете разделить одно приложение на несколько APK. После этого пользователи могут получать только те APK, которые им выгодны в соответствии с конфигурацией их устройства.

9. Избегайте перечислений

Перечисления сомнительны. Один можно легко добавить в любом месте в диапазоне от 1,0 до 1,4 КБ в файл class.dex приложения. Они могут потреблять много высокой скорости, если есть сложные фреймворки или общие библиотеки.

Итак, как вы можете преодолеть эту проблему? Что ж, с помощью ProGuard вы можете преобразовать перечисления в целые числа, и конечным результатом будет приложение уменьшенного размера.

Последние мысли

Ну, это всего лишь простые методы, которые вы можете реализовать в своем приложении для Android на этапе разработки приложения для Android. Это, несомненно, поможет вам понять, как можно уменьшить размер приложения или APK-файла и повысить эффективность.

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

  • Впервые опубликовано [здесь] (https://theonetechnologies.com/blog/post/5-ways-to-reduce-android-app-size)*

Источник: coffee-web.ru

Читайте также:
Как найти самое длинное слово в программе паскаль

Как уменьшить размер APK

По исследованиям Google — каждые 10 МБ веса приложения снижают шанс загрузки приложения пользователем на 6%. Это значит, что чем меньше весит ваше приложения, то вероятность, что его скачают, выше. Также важно не забывать, что у вашего приложения могут быть легковесные конкуренты, что даёт им преимущество.

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

В некоторых странах нет быстрого интернета вовсе, а его стоимость тарифицируется помегабайтно. Часть пользователей используют устройства с небольшим объемом памяти: 16, а то и вовсе 8 ГБ, что также заставляет их выбирать приложения по их размеру. Поэтому важно учитывать особенности всех устройств и регионов для достижения максимальной пользовательской базы.

Это статья — расшифровка нового видео на канале, в котором я рассказываю подходы, которые вы можете использовать для уменьшения размера вашего приложения. Это поможет упростить жизнь пользователей и скачиваться приложение будет быстрее. Скорость отладки приложения также ускорится, ведь билды будут быстрее доставляться на Android устройство и эмулятор.

Чтобы лучше понять это видео, я рекомендую посмотреть вам предыдущее, где я рассказал про то, что находится внутри APK и как Google Play оптимизирует доставку приложения, скачивая только необходимые части на устройства пользователя.

Если вам интересно следить за самыми последними новостями Android разработки и получать подборку интересных статей по этой тематике, тогда вам стоит подписаться на Телеграм-канал Android Broadcast и мой YouTube канал «Android Broadcast»

Какие размеры связаны с APK

Android приложение имеет несколько связанных с собой размеров

  1. Вес самого APK файла
  2. Размер начальной загрузки из магазина
  3. Размер приложения на устройстве, который можно увидеть в настройках системы в информации о приложении
  4. Размер скачиваемого обновления

В статье я буду разбирать, как оптимизировать размер APK (первый пункт списка). Чтобы повлиять на размер начальной загрузки и обновлений вам нужно полагаться либо на Google Play с его стандартными оптимизациями, либо заняться организацией многомодульной архитектуры приложения (подробнее тут), которая позволит вам выделять фичи вашего приложения и скачивать их по необходимости (Play Feature Delivery)

Ресурсы

Графика

Растровая графика

Любое приложение содержит множество картинок или загружает их с сервера. Давайте начнем с того, что мы оптимизируем графику, которая у нас в ресурсах Android приложений. Любые добавляемые картинки стоит хранить в оптимизированном формате. На момент записи этого видео — это WebP, формат для хранения изображений, разработанный компанией Google. Он поддерживается, начиная с Android 4.2.

Вы можете конвертировать любые растровые изображения в него прямо в Android Studio c помощью встроенной утилиты. При конвертации вам нужно будет выбрать компрессию, что сокращает размер файлов, но может сказаться на сохраняемых деталях. Обычно уровень компрессии выбирают в 80%, но вы можете экспериментировать с настройками. Важно понимать, что если вы можете видеть различия на большом экране с высокой плотностью, то часть артефактов ваши пользователи могут не увидеть на своих смартфонах вовсе.

В Android 12 (API level 30) появилась поддержка более современного формат AVIF на основе кодека AV1. Из-за фрагментации Android ждать, когда minSdk станет 30, нам еще долго, хотя может вам повезло или вы читаете статью в далёком будущем, когда в Android все цветёт и пахнет.

Оптимизаторы картинок

Также вы можете использовать оптимизаторы растровых картинок, которые позволяют без потери качества уменьшить вес приложения. Я лично на одном из своих проектов с помощью оптимизатора ImageOptim добился сокращения размера с 9 Мб до 6.5 Мб автоматическим прогоном всех картинок, т.е. уменьшением размера графики на 25%! Утилита это делает за счет сокращения количества хранимых уникальных цветов и других опций, которые позволяют делать различные форматы картинок.

Пример работы ImageOptim

Этот трюк сработает для PNG, JPG, BMP и статических GIF. WebP уже хорошо оптимизированный по размеру формат и при конвертации картинки в него вы скорее получите размер файла ниже, чем у оптимизированной PNG/JPG картинки.

После оптимизации в build.gradle вам надо отключить опцию crunchPngs, которая отвечает за оптимизацию PNG, так как для уже оптимизированных файлов может привести к увеличению их размера. Опция по умолчанию выключена для всех дебажных сборок, а поэтому правим ее только для релизных сборок. Возможно еще и скорость сборки незначительно улучшите.

android < . buildTypes < debug < crunchPngs false >release < crunchPngs false >> >

Не стоит оптимизировать 9-patch изображения. После оптимизации с помощью ImageOptim 9-patch изображения переставали корректно работать (Если знаете как это исправить — пишите в комментариях). По-хорошему вы и так должны добавлять 9-patch изображения в минимальном размере в пикселях для каждой плотности.

Векторная графика

Следующий шаг — это максимально использовать векторные форматы для изображений. Это не только VectorDrawable, но и более старые форматы — shape, gradient и др. Они позволяют описывать изображения в XML, что позволит вам заменить несколько растровых изображений на одно векторное, которое будет показываться в хорошем качестве на всех экранах.

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

У векторной графики есть одна проблема — экспорт их от дизайнеров содержит намного сложнее path-ы, по сравнению с оригиналом с сайта Material Design. Поэтому проверяйте, что будет оптимальнее для вас.

Шрифты

При анализе размера приложения я сталкивался с тем, что разработчики добавляют множество различных шрифтов и даже тянут за собой стандартный шрифт Android — Roboto. В этот момент я шел к дизайнерам и спрашивал: “Насколько принципиально использовать нам везде Roboto или наш системный шрифт по умолчанию, который скорее всего и является Roboto?” Практически всегда это устраивало всех дизайнеров, что позволяло удалять эти шрифты и упрощало задачу разработчикам..

Загружаемые шрифты

Важной особенностью шрифтов является то, что они уникальны, фактически имя шрифта идентифицирует его. Вряд ли в 2 разных приложениях в ресурсы положили файл с названием “Roboto”, включающим в себя 2 разных шрифта. А если таких приложений будет установлено 10 штук на телефоне? Тут с решением пришла Google.

Помимо того, что в Android 8.0 добавили ресурсы шрифтов, также появилась возможность не класть их как файлы, а описывать параметры ресурса и делегировать их загрузку Google Play Services. Фича называется — Downloadable Fonts. Конечно же все это кэшируется на устройстве и несколько раз загружать один и тот же шрифт сервис не станет. К сожалению, с момента анонса так и не появилось новых публичных поставщиков шрифтов кроме Google Fonts, но там вы найдете открытые и самые популярные шрифты.

Чтобы воспользоваться этой фичей, вам надо сгенерировать сертификат. Удобнее всего это сделать с помощью Android Studio через визуальный редактор UI. Затем надо описать необходимый шрифт в ресурсах через XML и после этого вы можете ссылаться также, как бы делали это с файлом шрифта, что позволяет провести миграцию на загружаемые шрифты очень просто.

По умолчанию вам надо будет запрашивать загрузку каждого шрифта в коде.

val request = FontRequest( «com.example.fontprovider.authority», «com.example.fontprovider», «my font», certs ) scope.launch < try < val typeface: Typeface = awaitFonts(context, request, handler, null, callback) // Шрифт загружен, можно начать использовать >catch (e: TypefaceRequestException) < val reason: Int = e.reason // Ошибка загрузки >>

Также вы можете добавить список шрифтов, которые надо скачать на устройство при установке или обновлении приложения из Google Play, что гарантирует их наличие на устройстве при первом запуске и вам не придется делать дополнительных шагов.

Читайте также:
Установить программу для книг на Андроид

Лишние ресурсы

Общие ресурсы

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

Пример общего модуля с ресурсами

Drawable Tint

Еще одну оптимизацию вы можете использовать для одинаковых по форме изображений, но разных по цвету. Название eй tint. Фактически это позволяет вам создать картинку на основе существующей, перекрасив ее в другой цвет. Это можно делать как внутри drawable ресурсов, так и многие view для атрибутов с drawable ресурсами имеют одноименный атрибут с приставкой Tint. Кстати, возможность делать tint влияет на то, что обычно все иконки в Android генерируются нейтрального цвета (серые или черные), а потом динамически перекрашиваются через tint

Удаление неиспользуемых ресурсов

Помимо этого, не забывайте удалять ресурсы, которые вы уже не используете. Такой анализ позволит вам выполнить Android Lint, да и сама Android Studio умеет определять места, где используется ресурс. Также я рекомендую вам в Gradle для билдов включать опцию shrinkResources, которая не добавляет в сборку неиспользуемые ресурсы.

Но нужно не забывать, что в Android доступ к ресурсам можно выполнять не только через R классы, но и динамически по его имени. Такое использование анализаторов, о которых я только что рассказал, не сможет работать и вам нужно добавить в исключения ресурсы, которые должны быть сохранены всегда. В этом случае вы должны будете самостоятельно следить за их своевременным удалением, чтобы не таскать в APK лишний груз.

Только необходимые конфигурации ресурсов

Зачастую в приложениях мы не поддерживаем все возможные конфигурации, например, добавляем лишь несколько языков, если не вовсе один; отказываемся от ресурсов для ldpi экранов и прочие упрощения во блага большинства. Но вот не все разработчики библиотек поступают также. Например, Google Play библиотеки поддерживают более 30 локалей и естественно тянут их за собой в ваши приложения, когда вы поддержку этих языков не осуществляете.

Android Gradle Plugin позволяет указать, какие именно конфигурации ресурсов вам нужно добавлять в финальный билд. Делается это с помощью параметра resourceConfigurations. Плагин сам определяет, к какой категории относятся указанные конфигурации, и оставит ресурсы только в тех, которые вы прописали.

android < defaultConfig < … // оставляем ресурсы только для английского и русского языков resConfigs += listOf(«en», «ru») >>

При использовании App Bundle Google Play будет загружать только актуальные необходимые строковые ресурсы и вроде бы оптимизация не нужна, но это не так. Ведь если в приложении некоторые строки будут содержать переводы для отдельных локалей, то вы получите часть текстов в заданном языке, а часть в языке по умолчанию (обычно это английский).

Код

Нативные библиотеки

Если у вас используются нативные библиотеки в приложении, то обычно вы сразу увидите, как их размер выделяется на фоне остальных файлов. Оптимизировать их размер можно с помощью использования Google Play Dynamic Delivery, т.е. используйте App Bundle как минимум не загружать

В процессе разработки мы за собой тягаем универсальную APK, что есть не очень хорошо, ведь это лишний вес. Тут на помощь придет специальная опция abiFilters в Android Gradle Plugin, которая позволяет указать, под какие ABI добавлять нативные либы. Я использую эту опцию во время разработки. Позволяет сократить размер dev сборки, т.е. быстрее доставлять её на устройство.

android < defaultConfig < ndk < // удаляем все ABI кроме ARM // не делайте так если вам важна поддержка x86 abiFilters = listOf(“armeabi-v7a”, “arm64-v8a”) >> >

Проблема этого подхода заключается в том, что эффект этой настройки распространяется на все сборки, что может быть вам не нужным. Чтобы сделать ее только локальной на вашем компьютере, я добавлял поддержку нового property из local.properties, в котором указывал поддерживаемые архитектуры и считывал их в Gradle скрипте. Код вы можете увидеть на экране, а ссылку на проект с примером я добавлю в описание к этому видео. Файл local.properties был выбран, потому что он по умолчанию игнорируется в Git и все, что там остается, только на локальной машине.

# local.properties в корне Android проекта android.abis=armeabe-v7a,arm64-v8a
// Считываем значения из файла local.properties def supportedAndroidAbis()

Вы также можете выбрать и другой способ передачи параметров только на вашей локальной сборке, например, через параметры Gradle сборки. Как это сделать, тоже можете увидеть в репо на GitHub.

ProGuard/R8

Я думаю мало кого удивлю, что для релизных сборок нужно использовать минификаторы, которые позволяют удалить неиспользуемый код, и обфускаторы кода, которые меняют название классов, методов и полей, что приводит к меньшему размеру файлов. Сейчас стандартном для этих оптимизаций кода в Android является R8 от Google, которая является и обфускатором, и минификатором.

Одной из ошибок, которые может допустить разработчик и увеличить размер приложения — это сохранять весь код в какой-то пакет, особенно весь код библиотек, а также отключать для него обфускацию. Такие рекомендации зачастую можно нагуглить при тестировании обфусцированных билдов. В первую очередь, проверяйте правила в репозитории проекта. Многие библиотеки в своих JAR/AAR уже содержат файл с правилами, которые автоматом будут использоваться.

Пример конфигурации ProGuard/R8, которая оставляет все в сборке

Чтобы проверить результат обфускации вашего кода, откройте APK, код которой прогонялся через R8 при сборке, а затем посмотрите, что есть в dex файлаx внутри.

Подключаемые библиотеки

Подключаемые библиотеки легко могут раздуть размер вашего приложения и нести за собой кучу неиспользуемого кода. Поэтому точно понимайте, зачем вы подключаете библиотеку, возможно, если ради одной простой функции, то лучше самостоятельно ее реализовать и не тянуть стороннюю зависимость.

Также часть библиотек может использоваться только малой частью пользователей, например, что-то связанное с AR или платными функциями. Тогда вам тут может помочь Google Play Dynamic Feature, подробнее рассказывал о ней в предыдущем видео. Сразу скажу, чтобы реализовать этот подход, от вас потребуются навыки построения архитектуры в коде и умение правильно организовать Gradle модули.

Странные файлы в APK

Помимо этого, в ваш APK из Java библиотек может попадать всякий мусор, я даже видел, как одна библиотека добавила свои Java исходники, а другие авторы кладут лицензии. Со всеми этими файлами можно работать из кода, поэтому система сборки Android не убирает эти файлы, а кладет по тому же пути, что они были в JAR или AAR. По сути многие файлы вам не нужны. Чтобы избавиться от них, вы можете воспользоваться настройкой процесса упаковки и сделать это в Gradle с помощью опции packagingOptions. Вы можете указать, какие файлы и папки не должны попасть в выходной билд, решить конфликты (например, когда есть несколько одинаковых файлов, но в разных либах)

android < packagingOptions < // Для so файлов jniLibs.pickFirsts += [“lib/**/libA.so”] // Для всех прочих файлов resources.excludes += [«README.md», «sources/**»] >>

Очень важно понимать, что часть файлов важна для работы библиотек, так, например, JodaTime в Java ресурсах тащит с собой базу часовых поясов и без нее библиотека перестанет работать. Поэтому удаляйте все постепенно и проверяйте работоспособность приложения.

Анализируем результат

После того как мы выполнили все оптимизации, наступает время проверить результат и сделать это можно в Android Studio через тот же инструмент, где мы смотрели содержимое APK. Мы можем посмотреть наш прогресс и сравнить 2 APK между собой. Все очень просто и понятно, поэтому не буду тратить время на демонстрацию моих навыков Drag https://habr.com/ru/companies/broadcast/articles/715062/» target=»_blank»]habr.com[/mask_link]

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru