Как уменьшить android размер приложения, использующего PDF-файлы в папке активов - PullRequest
0 голосов
/ 01 апреля 2020

Я делаю книжное приложение с файлами PDF в папке активов. Все файлы 10-20mb после сжатия. Как я могу сохранить размер приложения маленьким? Сейчас 500+ мб.

1 Ответ

0 голосов
/ 01 апреля 2020

Android studio предоставляет несколько инструментов: APK Analyzer APK Analyzer разрушит ваше приложение и сообщит, какой компонент в вашем файле .apk занимает больше места? Давайте взглянем на apk-файл блокировки экрана Anti-Theft без какой-либо оптимизации.

APK Analyser Example 1

Из результатов анализа apk вы можете увидеть, что приложение сырой размер составляет около 3,1 МБ. После применения сжатий Play Store размер приложения составляет примерно 2,5 МБ. Как вы можете видеть на скриншоте, есть 3 основные папки, которые занимают большую часть размера приложения.

  • classes.dex - это dex-файл, который содержит все файлы байт-кода вашего java код, который будет работать на вашем DVM или ART.
  • res - эта папка содержит все файлы в вашей папке res. Большую часть времени он будет содержать все изображения, значки и необработанные файлы, файлы меню и макеты.
  • resources.ars c - этот файл содержит все значения ресурсов. Этот файл содержит все данные, которые у вас есть в разных папках значений. Этот ресурс содержит строки, размеры, стили, целые числа, идентификаторы и т. Д. c.

APK Analyser Example 2

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

Reduce classes.dex:

Как мы уже обсуждали, он содержит весь код java. Пока вы создаете свое приложение, gradle объединит все ваши файлы .class из всех модулей и преобразует эти файлы .class в файлы .dex и объединит их в один файл classes.dex. Одиночный файл classes.dex может вместить около 64 тыс. Методов. Если вы превысите этот лимит, вы должны включить в своем проекте multidexing . Который создаст другой файл classes1.dex для включения всех оставшихся методов. Таким образом, количество файлов classes.dex зависит от количества имеющихся у вас методов.

APK Analyser Example 3

Как вы можете видеть в настоящее время «Защита экрана от кражи» содержит 4392 класса и 29897 методов. Этот результат без применения Proguard. У вас есть два файла proguard по умолчанию, которые вы можете применить.

- proguard- android -optimize.txt

- proguard- android .txt

Как следует из названия «proguard- android -optimize.txt» - более агрессивная конфигурация progurard. Мы использовали это как конфигурацию Proguard по умолчанию. Вы можете добавить свои собственные конфигурации proguard в файл proguard-rules.pro в каталоге / app .

Сжатие Gist 1

Установив для minifyEnabled значение true (в «Сжатии 1»), вы указываете proguard удалить все неиспользуемые методы, инструкции и уменьшите файл classes.dex .

Вот результат, полученный при включенной минификации APK:

APK Analyser Example 4

Как вы можете видеть, включив proguard в каждом модуле нашего проекта, мы Можем ли мы уменьшить размер файла classes.dex почти на 50%. Также видно, что количество методов уменьшилось с 29897 до 15168 (почти на 50%).

Размер уменьшен с 3,1 МБ до 1,98 МБ. (Уменьшение ~ 50%)

Уменьшение разрешения:

Второй по величине компонент в вашем размере apk - это папка res, которая содержит все изображения, необработанные файлы и XML. Вы не можете добавлять / удалять / изменять свои XML, так как они содержат ваши макеты. Но мы можем уменьшить файлы изображений.

  • Атрибут «shrinkResources» удалит все ресурсы, которые нигде не используются в проекте. Включите это в файле build.gradle, добавив следующую строку:

Сжатие 2

  • «resConfigs» * Атрибут 1102 * удалит все остальные локализованные ресурсы при сборке приложения. В нашем случае «Anti-Theft Screen Lock» поддерживает только язык Engli sh. Хотя все библиотеки поддержки могут иметь локализованные папки для других языков. Который нам не нужен. Поэтому добавьте следующую строку, чтобы разрешить добавление только ресурсов Engli sh в файл APK.

Сжатие 3

  • Android Studio 2.3, и минимальная версия вашего приложения составляет 18 или выше, вы должны использовать webp вместо png. Изображения webp имеют меньший размер, чем файлы png, а также сохраняют исходное качество изображения. Более того, изображения webp изначально поддерживаются в Android. Таким образом, вы можете загружать изображения webp в ImageView так же, как и другие растровые изображения. Таким образом, вам не нужно менять макеты.

Вы можете выбрать в своем проекте папки drawable и mipmap, щелкните правой кнопкой мыши и выберите convert to webp . Откроется диалоговое окно настройки ниже.

convert to webp Нажмите кнопку ОК, и все изображения png будут преобразованы в формат webp один за другим. Если размер изображения webp больше размера png, Android Studio автоматически пропустит этот файл.

Давайте посмотрим на конечный результат:

APK Analyser Example 5

  • Размер папки res уменьшен с 710 КБ до 597 КБ.

При применении описанных выше простых приемов размер приложения уменьшается с 3,19 МБ до 1,89 МБ.

Happy Coding ?

...