Как сжать приложения на андроид
Рекомендую сначала прочитать статью Playing APK Golf (или её перевод). Это крайне интересно, как исследовательская работа, но абсолютно неприменимо в реальной разработке.
Proguard
При сборке apk в его dex файл (или файлы) попадает весь код приложения и весь код всех подключенных библиотек, даже неиспользуемый. Хорошо бы от этого лишнего кода избавиться. Для этих целей есть специальный инструмент под названием proguard. Он уже включён в Android SDK и любой Android проект из коробки настроен для работы с ним. Данный инструмент делает следующее:
- Удаляет неиспользуемые классы, методы и поля;
- Оптимизирует Java байткод;
- Слегка обфусцирует код переименованием классов, методов и полей.
Всё это происходит на уровне Java байткода (не dex байткода), то есть файлов .class. На вход подаются jar(aar) файлы, а на выходе получаются они же, но в оптимизированном виде. В результате вес байткода значительно уменьшается.
В простейшем случае для включения proguard нужно открыть build.gradle конфиг уровня приложения и в блоке android/buildType/release выставить свойству minifyEnabled значение true:
Если в проекте есть классы, которые участвуют в рефлексии, нужно запретить их переименование, так как при попытке обращения к классам(и их свойствам и методам), которые были переименованы, приложение упадёт с исключением. Это также касается pojo(data) классов, которые маппятся, например, через Gson, Firebase Database или какой-нибудь ORM. Для того, чтобы оставить такие классы без изменений, нужно в файле proguard-rules.pro применить к ним правило -keep:
Или для всего пакета:
Со всеми правилами можно ознакомиться по ссылке.
Размер приложения уменьшился с семи мегабайт до трёх с половиной и это только за счёт оптимизации байткода. Посмотрим, что внутри через APK Analyzer:
Вот зачем это нужно. После обработки proguard код становится трудночитаемым и выглядит примерно так. Если произойдёт эксепшен, понять его стектрейс будет очень сложно. mapping.txt помогает расшифровывать эти стектрейсы так, будто код и не был обфусцирован.
Также стоит упомянуть о существовании инструмента под названием DexGuard, который оптимизирует dex байткод, но он платный и простым смертным недоступен.
shrinkResources
Теперь при сборке apk можно увидеть следующую строку:
В итоге apk уменьшился на 32 килобайта:
Не очень много, но тоже хорошо. Тут всё зависит от проекта, иногда вырезается более ощутимый объём.
Данная опция не будет работать, если в приложении есть модули Dynamic Features и\или Instant App.
Удаление ненужных языковых ресурсов
Некоторые библиотеки, особенно гугловские support lib(androidx) и firebase, содержат ресурсы для множества языков. Чтобы их удалить нужно явно указать, какие языки используются в приложении. Это делается в build.gradle уровня приложения в блоке android/defaultConfig (или в конкретном конфиге):
В моём случае это русский и английский. При сборке в apk будут включены только ресурсы для указанных языков. Посмотрим, что получилось:
Вес apk уменьшился ещё на 265 килобайт. Неплохо. Посмотрим, что внутри:
В apk остались языковые ресурсы только для русского и английского. Было 86 языков, а осталось только два.
Ещё одно средство для оптимизации байткода, но уже от гугла. Думаю, есть ненулевая вероятность того, что R8 когда-нибудь полностью заменит proguard. Этот инструмент встроен прямо в компилятор D8, который превращает Java байтод в dex байткод. В отличии от proguard, R8 работает в момент компиляции java байткода в dex байткод, что немного уменьшает общее время сборки apk.
R8 можно включить в Android Studio, начиная с версии 3.3, а с версии 3.4 он включен по-умолчанию. Для включения R8 нужно открыть файл gradle.properties и добавить строку:
Кроме этого, можно включить агрессивный режим оптимизации строкой:
Но эта функция, пока что, нестабильна и не рекомендуется к использованию.
R8 поддерживает правила для proguard (упоминавшийся ранее файл proguard-rules.pro) и точно так же генерирует файлы mapping.txt, seeds.txt и usage.txt. Кроме вырезания ненужного кода и обфускации, R8 также оптимизирует dex байткод (помним, что proguard оптимизирует только java байткод). После сборки видим, что удалось сэкономить ещё 28 килобайт за счёт уменьшения dex файла:
В целом, после четырёх шагов удалось уменьшить вес приложения более, чем в два раза. Считаю, что результат достойный, особенно, если учесть, что это ещё не всё.
App Bundle
После сборки получается файл:
Его вес больше, чем вес apk, но это не имеет значения. По сути, это сырой файл приложения из которого могут быть сгенерированы apk файлы, которые можно устанавливать на android устройства. Этот файл загружается в Google Play Console, вместо apk, и там происходит магия. Приложение разбивается на основной apk и на набор apk конфигурации. При установке на устройство приложение собирается по частям:
При загрузке бандла в Google Play Store можно увидеть, сколько будет весить приложение:
На IO 2018 показывали такую картинку:
Для проверки и тестирования есть утилита bundletool. Она позволяет генерировать apk из бандла и манипулировать ими.
Dynamic Features
Удаление метаданных kotlin из сборки
Ещё один простой способ, подсмотренный в этой статье. В META-INF записываются дополнительные данные для рефлексии. Если в приложении не используется полноценная kotlin рефлексия(пакет kotlin-reflect), то эти файлы можно не включать в приложение. Для этого в gradle конфиге уровня приложения в блоке android нужно прописать следующее:
В моём случае вес приложения уменьшился ещё на 412 килобайт. Здесь показатель уменьшения веса напрямую зависит от количества кода в приложении. После сборки приложения стоит убедиться, что ничего не поломалось, так как рефлексия может использоваться в подключенных библиотеках. Также можно исключать отдельные файлы, чтобы оставить нужные для рефлексии.
И это ещё не всё
Сегодня в магазинах приложений для платформ iOS и Android существует ограничение на размер приложения в 100 МБ. Магазин Apple для приложений, которые не укладываются в этот лимит, запрещает закачку при помощи мобильного интернета. В Google Play же это строгий лимит на размер APK – все, что не укладывается в него, должно быть вынесено в файлы дополнений. Для пользователей с платным трафиком закачка большого приложения может быть довольно затратной, поэтому его размер нужно стараться уменьшить всеми силами.
В рамках этой статьи мы расскажем, с помощью каких приемов мы смогли уложиться в это ограничение на проекте Gardenscapes для платформы iOS. Статья касается в основном мобильных игр, но методы сжатия универсальны и могут пригодиться для любых проектов с тяжелой графикой. Для того, чтобы говорить о методах сжатия, нужно определиться с тем, как формируется архив приложения.
Формат магазина приложений Apple
Приложения на платформе iOS распространяются в виде бинарных файлов с расширением .ipa. Эти сжатые .zip-папки, в которые входит исполняемый файл приложения (для процессора с архитектурой ARM), а также ресурсы приложения. Использование .zip-формата означает, что ваш ipa-файл можно открыть с помощью любой удобной утилиты для работы с архивами и изучить. Если точнее, то Apple использует свой собственный формат LZFSE, и так просто распаковать архив не получится. Тем не менее, оглавление архива прочитать можно без дополнительных усилий. Для примера давайте посмотрим на содержимое ipa в проекте Gardenscapes:
Диаграмма распределения ресурсов в .ipa файле
Большую часть занимают ресурсы игры, при этом исполняемый файл почти не уступает им. Системные ресурсы и ресурсы SDK при этом занимают достаточно мало места в архиве, поэтому оптимизировать их чаще всего нет смысла.
Оптимизация размера исполняемого файла
Исполняемый файл занимает так много места по двум причинам:
- В нем содержится бинарный код для двух архитектур (32 и 64 бита);
- Исполняемый файл в ipa зашифрован, что сильно ухудшает сжатие.
Пункт 2 актуален всегда. При расчете предполагаемого размера IPA нужно учитывать несжатый размер исполняемого файла. В лучшем случае он сожмется только незначительно. Именно поэтому Apple не рекомендуют хранить большие объемы данных (изображения, большие текстовые ресурсы и т.д.) в исполняемом файле, это может привести к аномально большому размеру приложения. Стоит также проверить настройки оптимизации в XCode и убедиться в том, что вы не подключаете лишние библиотеки.
Оптимизация ресурсов
Для мобильных игр можно выделить группы ресурсов, по списку от более тяжеловесных к менее тяжеловесным:
- Игровая графика;
- Анимации;
- Видео и звуки;
- Шрифты;
- Текстовые ресурсы и текстовые настроечные файлы.
Сжатие игровой графики
Размер графики можно уменьшить двумя способами:
- Плотно упаковать графику в полигональные атласы, чтобы сэкономить за счет прозрачных пикселей. Полигональные атласы больше предназначены для экономии оперативной памяти, но и размер файлов с атласами тоже становится несколько меньше.
- Разделить графику на различные группы, по требуемому качеству и упаковать каждую группу в свой сжатый формат.
- png: формат сжатия без потерь. У него наилучшее качество, но он занимает очень много места на диске. Этот формат не рекомендуют использовать в приложении, поскольку lossless-вариант webp оптимальнее по размеру. Тем не менее, загрузочный экран и иконки приложения в ipa должны быть в формате .jpg. Для оптимизации размера .jpg можно воспользоваться утилитой optipng, доступной в Mac Ports.
- webp: lossy-вариант c приемлемым размером. Позволяет менять качество для различных типов изображений, но достаточно долго распаковывается. Существует также и lossless-вариант.
- pvrtc: аппаратно-поддерживаемый сжатый формат для iOS. Быстро загружается, занимает очень мало места. Однако, есть ряд ограничений. Во-первых, изображение обязательно должно быть квадратом со стороной, равной степени двойки.
Пример одного и того же изображения в формате webp, сжатого с настройкой качества 85, 95 и 100. Разница заметна, но даже самое сжатое изображение выглядит приемлемо. При этом разница в размере между webp85 и webp95 примерно 3 КБ.
webp нужно применять осторожно из-за проблем со скоростью распаковки. На медленных устройствах загрузка такого изображения может дать заметные лаги. Не стоит использовать его для упаковки большой графики, которая подгружается на лету.
В таблице приведены размеры атласа 2048x2048 при сжатии в разных форматах:
Формат | png | pvrtc | webp lossless | webp 95 quality | webp 85 quality |
Размер, КБ | 8057 | 2049 | 5593 | 2218 | 1579 |
Как видите, формат png не следует использовать вообще. Из форматов webp и pvrtc можно выбрать подходящий, с учетом требований к качеству графики и скорости ее загрузки
Анимации
В Gardenscapes в основном используются анимации с ключевыми кадрами, которые экспортируются из .swf. Для экономии места в таких анимациях нужно стараться оптимизировать число кадров в секунду (FPS). В нашем проекте стандартом выбрана частота 24 FPS, анимации не теряют в качестве и достаточно компактны. Помимо частоты кадров, на размер анимации влияет количество деталей. Если анимация содержит много деталей, ее размер также будет большим – поскольку для каждой детали будет хранится свой набор ключевых кадров. Для дополнительного сжатия мы используем специальный lossy-кодек для анимаций. Также мы используем FSE-кодирование, больше информации можно найти здесь.
Видео и звуки
Здесь нет каких-то общих рекомендаций, в целом все сводится к тонкой настройке форматов кодирования. Какого-то феноменального выигрыша тут получить нельзя, у нас получилось сжать видео на примерно 30% по сравнению с первоначальным вариантом и сэкономить порядка 10-20% на звуках. Все зависит от конкретного видео и аудио – нужно подбирать настройки экспериментально.
Шрифты
Обычно, шрифты не занимают много места в большинстве приложений. Но это пока вы не столкнетесь с локализациями для языков с иероглифическим письмом. Число иероглифов там может измеряться тысячами. Это увеличивает файлы шрифтов до нескольких мегабайт. Чтобы бороться с этим, мы используем автоматизированный скрипт, который составляет списки символов на основе файла с игровыми текстами – все неиспользуемые символы удаляются изо всех шрифтов.
Текстовые ресурсы и текстовые настроечные файлы
Это обычно самая малая по размеру группа ресурсов, и ее не нужно отдельно оптимизировать. Сам ipa-файл это архив, а текстовые данные хорошо архивируются. В нашем проекте тексты тем не менее занимают довольно много места. В основном из-за необходимости поддержки многих локализаций.
Если все возможности исчерпаны
Размер билда – это действительно проблема для нас. Насколько все серьезно, можно понять по некоторым дополнительным способам сжатия, которые мы изобрели.
- Внутри ipa-файла приложение упаковано в так называемый пакет (package). Все файлы приложения находятся в папке «Payload/<имя_пакета.app>. При упаковке файла в zip-архив к оглавлению прибавляется его полный путь. Поэтому, <имя_пакета.app> будет в оглавлении всех файлов игры. И если файлов много, то как ни крути, а лишняя информация дублируется. Мы переименовали пакет так, чтобы его имя состояло ровно из одной буквы, и хоть чуть-чуть, но уменьшили размер.
- Просматривая содержимое исполняемого файла, мы увидели, что встречаются полные пути к исходным файлам C++. Откуда они взялись? Оказывается, некоторые макросы __FILE__, __LINE__, попадали в production-код, и компилятор заботливо раскрывал их для каждого исходного файла, где они использовались. Мы провели ревизию таких макросов, и еще немного уменьшили билд.
- У кого-то есть еще идеи? Напишите в комментариях.
Итого
Оптимизация размера билда – обширная тема, в этой статье описаны только общие принципы и способы сжатия ресурсов. Кроме этого обычно возникают и другие сложные вопросы:
- Менеджмент ресурсов: как избавиться от дубликатов ресурсов и найти все неиспользуемые ресурсы;
- Система загрузки ресурсов из интернета, если мы не влезли в 100 МБ. Как организовать дозагрузку ресурсов так, чтобы пользователь испытывал минимум дискомфорта, а дизайнерам было бы удобно с ней работать;
- Как минимизировать расход трафика, особенно при обновлении версии игры.
Post scriptum
Пока статья готовилась к публикации Apple увеличила максимальный объем билда до 150 МБ. Казалось бы, стало лучше. Но в Google Play все еще остается лимит 100 МБ. В результате все получается еще сложнее. Если мы при подготовке билда для iOS будем ориентироваться только на ограничение магазина Apple в 150 МБ, то после этого при подготовке билда для Android точно не сможем уложиться в 100.
Нужно делать разные билды для iOS и Android, чтобы оптимально использовать возможности магазинов приложений. Сейчас мы все еще в процессе поиска лучшего решения. И очень ждем аналогичного шага по увеличению лимита от компании Google. После этого можно будет просто заменить в тексте статьи число 100 на 150, и в ней снова все будет правильно.
Всем известно, что Android Market накладывает ограничение на размер публикуемых программ. Сегодня в магазине можно разместить приложение, размер которого не превосходит 50 Мб, но что же делать, если Вы вылезли за это ограничение?Дэвид Карлссон, архитектор приложений из Sony Ericsson, дает несколько советов, которые помогут уменьшить размер вашего apk файла.
Что такое APK формат?
APK- аббревиатура от Android application package (файл архива Android программы). Каждое Android приложение упаковывается в apk архив, содержащий исполняемый код (.dex файлы), ресурсы, активы и файл манифеста. Фактически apk представляет собой обычный zip архив, поэтому не имеет смысла предварительно сжимать файлы ресурсов каким-нибудь архиватором.
Ниже приводится несколько полезных советов, которые помогут вам уменьшить размер ваших Android программ.
Используйте ProGuard
ProGuard- это обфускатор, попутно сжимающий размер кода. Как известно, Java приложения компилируются в байт-код, из которого довольно просто восстановить java исходник. Для усложнения жизни любителям реверс-инженерии придумали обфускаторы. Обфускатор служит для запутывания исходного кода программы, при сохранении исходной функциональности. Получается рабочий исходник, мало пригодный для чтения человеком. Программа ProGuard помимо собственно обфускации сжимает исходный код, делает его более быстрым и менее требовательным к памяти. Очень важно после использования ProGuard провести тщательное тестирование полученного приложения. Возможны ситуации, когда в ходе оптимизации и обфускации кода изменяется его функциональность. В таких случаях важно позаботиться о сохранении symbol mapping, чтобы можно было восстановить из обфусцированного кода исходный и попытаться выявить источник проблем.
Удаляйте отладочную информацию
Дэвид рекомендует перед компиляцией финальной версии программы убрать из нее все связанные с отладкой конструкции, поскольку они не несут для пользователя ничего полезного.
Часто начинающие разработчики оформляют отладочный код в виде отдельных методов
Это не лучшее решение, поскольку на этапе сборки релиза будет удален блок if (Debug) , но сам методmyDebugPrint() и его вызов останутся нетронутыми и будут занимать место.
Удаляйте отладочные символы из нативных библиотек
Использование символов отладки имеет смысл, когда ваше приложение находится в стадии разработки. Если Вы решили собрать релиз, Дэвид рекомендует удалить символы отладки из нативных библиотек (.so файлы). Это можно сделать, вызвав команду arm-eabi-strip из Android NDK.
Используйте рекомендуемые медиа форматы
Если ваше приложение содержит графику, видео и аудио данные, использование "правильных" форматов может положительно сказаться на размере приложения. Дэвид рекомендует использовать следующие форматы:
- Рисунки: PNG и JPEG. Формат PNG позволяет добиваться хорошей компрессии при отсутствии ухудшения качества картинки. JPEG хорош для больших по разрешению картинок.
- Аудио: Используйте ACC Audio. Этот формат обеспечивает лучшую компрессию, чем широко распространенные mp3 и Ogg Vorbis. Никогда не используйте wav. Это формат для профессиональных музыкантов. В нем не используется компрессия и содержится много избыточной информации. Часто wav используется для декодирования сжатого аудио потока. Обычно такой подход сопровождается заметными временными задержками. Android имеет средства для воспроизведения сжатого аудио потока лишенные этого недостатка (Sound Pool API).
- Видео: Используйте формат H264 AVC. Если видеофайл имеет большое разрешение, обязательно перекодируйте его под разрешение экрана целевого устройства.
Компрессируйте PNG файлы
Довольно часто получаемые в результате работы графических редакторов PNG файлы плохо скомпрессированы и их размер может быть дополнительно уменьшен с помощью специальных утилит:OptiPNGилиPNGCrush. Обе эти программы пересжимают PNG файл, сохраняя качество картинки. Программы перебирают параметры PNG фильтров и настроек алгоритма сжатия и создают на выходе файл с оптимальными параметрами.
Используйте 9patch PNG для масштабируемых изображений
9patch PNG- специальный формат, который может быть использован для создания растягиваемых подложек. Наиболее часто этот формат используется для создания кнопок и других элементов пользовательского интерфейса. В рамках 9patch картинка разбивается на 9 сегментов - четыре угла, четыре грани и центральная часть. На основе такой картинки можно создавать подложки произвольного размера, при этом угловые сегменты никак не масштабируются; ребра и центральный сегмент растягиваются (многократно повторяются), заполняя промежутки между углами. Ниже показана 9patch картинка и две сгенерированные на ее основе кнопки. Применение этого формата позволяет существенно уменьшить размер графики, необходимой для создания интерфейса.
Удаляйте неиспользуемые ресурсы
Как правило, папка res содержит несколько неиспользуемых ресурсов. Для их удаления можно использовать специальную утилитуandroid-unused-resources, которая сканирует Ваш исходный код и удаляет из проекта неиспользуемые ресурсы.
Избегайте дублирования
Убедитесь, что в вашем приложении не дублируется функциональность и активы (строки, рисунки и т.п.). Важно понимать, какие Android API вы используете, и знать их функциональность. Может получиться, что в вашей программе для решения задачи, которую можно решить средствами уже подключенных API, подключается новый API. Дублирование кода, например, включение в программу функций делающих одно и то же, также ведет к разбуханию APK файлов.
когда я устанавливаю свое приложение на телефон для тестирования,он показывает, что это огромный размер, 11.35 MB. Это очень простое приложение, которое позволяет пользователю просматривать забавные факты. Единственная причина, по которой я могу думать о том, что в drawables есть 14 JPEG-файлов, которые служат фоновыми изображениями забавных фактов. Средний размер составляет около 500 КБ.
Я хотел бы обрезать размер моего приложения, чтобы не использовать драгоценные ресурсы на устройстве пользователя. Помимо того, чтобы просто избавиться от фотографий, есть ли способы оптимизировать размер файла apk?
EDIT: фотографии-это фотографии, сделанные мной с помощью самого телефона Android.
другие ответы упоминают сжатие изображений. Вы также можете попробовать ProGuard сжать свой байткод. вот статья при применении ProGuard к Android-приложению.
убедитесь, что ваши jpg не хранятся в более высоком разрешении, чем необходимо. Хороший телефон Android имеет разрешение экрана 1920x1200 или 2560x1440 (около 2015) 800 x 480, поэтому ваши фоны не должны содержать больше пикселей, чем это (если ваше приложение не поддерживает какое-то масштабирование). Кроме того, фотографии фона? Если нет, вы можете обнаружить, что использование векторного формата изображения, такого как svg, или с динамической палитрой, такой как gif, уменьшит размер файла даже больше.
обновление
с введением библиотеки поддержки 23.2, теперь вы можете заменить многие из ваших активов изображения с SVG (ж/ или без анимации), чтобы уменьшить размер apk дальше.
оригинал
Это может быть поздний ответ, но может быть полезно для будущих пользователей.
передать этот ссылке. Чтобы резюмировать страницу, он упоминает ниже ключевые моменты, которые помогут уменьшить размер apk в тотальность:
- использовать ProGaurd
- удалить любую отладочную информацию у вас есть в приложении (операторы, такие как Log.я.))( Они могут быть обернуты в состояние, которое включено только при тестировании приложения.
- использовать рекомендуемые форматы медиа
- изображение: PNG orJPG
- Аудио: AAC
- видео: кодек H264 AVC и
помимо оптимизации изображений, я также счел полезным проверить используемые вами библиотеки поддержки. У меня есть относительно простые платформы таргетинга приложений с API >=10, но мой APK оказался 2.2 M, или после использования ProGuard, 1.4 M. когда я заглянул в APK, код был 1.5 M, и было много дополнительных ресурсов (abc_*), о которых я ничего не знал.
оказывается, мне не нужен appcompat-v7, только поддержка-v4, и внесение этого изменения в мои зависимости уменьшило размер APK до 1.7 M (0.9 M с ProGuard). Понятно, что библиотеки поддержки несут много дополнительных (код и ресурс), поэтому убедитесь, что вы используете только те, которые вам нужны, может помочь.
(хотя -0.5 M не является значительным для приложения 11M, я размещаю это здесь, потому что я сохранил в конечном итоге на этой странице во время поиска решения. )
- использовать tinypng сжать png вашего проекта или файлы изображений формата jpg, он может значительно уменьшить размер изображения без потери качества изображения;
- некоторые изображения используют сжатие tinypng может искажение, вы можете преобразовать
эти изображения в формате webP, используйте 智图 или Испарта может конвертировать другой формат в webP; - использовать Lint проверить нет ресурсов использования и удалить его;
есть две вещи, которые я могу отметить из опыта.
- Если вы используете eclipse для создания файла apk, то ресурсы дублируются (по крайней мере, это произошло в моем случае), вы можете попробовать использовать ant и build.xml для создания apk и сравнения размера.
- Также посмотрите на сглаживание ресурсов. Ссылка для него здесь.
Я знаю, что я поздно здесь, чтобы ответить на этот вопрос, но я уменьшить размер приложения, используя методы ниже я хочу поделиться этими вещами со всеми.
1) - используйте изображения WebP вместо изображений Jpeg, это окажет огромное влияние на размер apk, если вы используете несколько изображений.
2) - Используйте VectorDrawables, если вы используете простые маленькие значки в своем приложении.
3) - используйте свойство tint View в xml, чтобы избежать нескольких одинаковых значков, но разных по цвету.
поиск DrawableTint и TintableImageview
4)-Используйте 9-патч изображения и избежать дублирования изображения или что-нибудь в коде приложения.
Ниже приведены ссылки для ссылки на сокращение APK размер.
формат изображения WebP: обеспечивает сжатие с потерями (например, JPEG), а также прозрачность (например, PNG), но может обеспечить лучшее сжатие, чем JPEG или PNG
четыре способа и размер вашего приложения станет от 11.35 MB до около 5 MB. Во-первых, проверьте компоненты приложения через App Analyzer (встроенная функция Android studio), просто нажмите на сборку сверху и нажмите Analyze APK. Он покажет вам все, что компоненты apk использует.
- Включить Proguard
- Включить ShrinkResource
- resConfigs (назовите его, например, если ваше приложение только на одном языке, например, английском, просто укажите resConfigs "Эн")
- конвертировать все изображения из .jpg или.jpg в webp (самое главное).
шагов для достижения этих шагов.
1 & 2. Для Proguard и ShrinkResource
в gradle просто добавьте
для преобразования всех изображений из .jpg или.jpg в webp
очень простой процесс: просто щелкните правой кнопкой мыши на папке drawable папка (drawable, drawable-hdpi, drawable-xhdpi и т.д.) и нажмите на convertToWebP (последний вариант).
минимальная версия SDK должна быть 18.
вот мы идем: теперь проанализируйте размер вашего приложения.
Я думаю, что это в должности даст вам лучшее представление обо всех возможных методах использования, чтобы уменьшить размер apk с огромным отрывом.
Я дам вам отрывок из того же.
- используйте только необходимые библиотеки из служб Google Play.
- применить ProGuard к вашему приложению.
- уменьшать и уменьшать.
- принять векторные рисунки.
- используйте Android lint.
- разделить apk на основе архитектура
- добавление resConfigs в файлы gradle для указания языков локализации.
Это удаляет все другие строковые файлы, которые могли быть добавлены другими библиотеками на языках, которые вы даже не поддерживаете.
наряду с приведенными выше наиболее загруженными ответами, я хотел бы ответить последними инструментами из Android Studio Google.
Google недавно представила Android App Bundle в котором playstore автоматически доставил оптимизированную версию apk для конечных устройств. Теперь разработчикам просто нужно сгенерировать подписанный пакет и загрузить в play store, работа dev завершена. Не забывайте всегда использовать SVG-изображения.
преобразовать в WebP что значительно уменьшит размер приложения
это уменьшило размер приложения моего приложения, которое было 40 mb to 25 mb
действия:
- Правой Кнопкой Мыши на res
- преобразовать в WebP
что это значит: он уменьшает размер до png to . Качество также не разрушается
вот что вы можете сделать для уменьшения размера сборки по изображениям (также может работать для iOS) Здесь я делюсь отличным инструментом под названием "OPTIPNG" (вы можете скачать с здесь), который поможет нам уменьшить сборку специально с помощью изображений, это уменьшит размер изображения для PNGs мы используем без ухудшения качества (разрешение и цвет) изображения.
пример-Если ваш размер изображения выключен 698 КБ, то он будет просто уменьшен до 564 КБ
здесь это шаги выполнения для OPTIPNG 0.7.5
1) терминал - > CD / YourLocal путь OPTIPNG
2) тип "./настроить"
3) введите "sudo make install"
установки должно быть сделано сейчас
4) Введите " optipng / ваш путь изображения
вы получите результат в байт, а также можете проверить свой размер
Я Trimage Image compressor для сжатия изображений и уменьшения размера apk.Он имеет хорошую скорость сжатия, прост в использовании, сохраняет качество изображения и также доступен в Ubuntu.Кроме того, я включил ProGuard и работал над проблемами корпии, чтобы уменьшить размер APK.
Ниже приведены способы уменьшения размера приложения. Подробно объясняется в следующей ссылке.
оптимизация png изображений
удалить неиспользуемые ресурсы
сжатие Jpeg изображений
удалить отладки информация
широко использовать корпию
повторное использование ресурса, когда это возможно
рекомендуемые форматы медиа
вы можете уменьшить размер apk по del R.class и заменяет ссылку на константу.
APK содержит zip-файл всех вещей, которые ваше мобильное приложение имеет, включая файлы классов Java, файлы ресурсов и другие.
один из простых способов сделать ваш APK меньше-уменьшить количество и размер ресурсов, которые он содержит. В частности, можно удалить ресурсы, которые больше не используются приложением, и вместо файлов изображений можно использовать масштабируемые Рисоваемые объекты.
использовать MinifyEnable true и ShrinkResources true
MinifyEnabled уменьшит ваш код по мере его сжатия. В то время как shrinkResources сокращает ресурсы.
чтобы использовать ShrinkResources, вы должны установить minifyEnbled true.
используйте изображения SVG вместо jpg, чтобы уменьшить размер apk. поместите файлы изображений в базу данных .. чтобы пользователи вашего приложения могли загрузить его из базы данных, и это значительно уменьшит размер приложения..
Читайте также: