Намаляване на размера на APK файла с помощта на R8 и ProGuard

  • Внедряване на R8 и ProGuard за премахване на мъртъв код и обфускация на класове.
  • Използване на Android App Bundles за оптимизиране на доставката на ресурси въз основа на устройството на потребителя.
  • Замяна на тежки ресурси с ефективни формати като WebP и Vector Drawables.
  • Конфигуриране на динамични модули за изтегляне на функционалности при поискване.

Намаляване на размера на APK файла с помощта на R8 и ProGuard

С добавянето на функции и усложняването на приложенията ни е доста често срещано крайният размер на файла да се увеличи значително. Това е сериозен проблем, защото ако дадено приложение е твърде голямо, много потребители се замислят, преди да кликнат върху бутона за инсталиране или, още по-лошо, прекратяват изтеглянето по средата. Освен това, голямото приложение заема повече място за съхранение на телефона и в крайна сметка може да повлияе на бързината на системата.

За да предотвратите превръщането на проекта ви в дигитален гигант, има няколко стратегии, вариращи от почистване на кода до оптимизация на изображения. В тази статия ще разгледаме как да използвате инструменти като R8 и ProGuard , както и магията на App Bundles, за да направите приложението си възможно най-леко и бързо, като гарантирате, че то работи безупречно дори на устройства от нисък клас.

Разбиране на това, което наистина е важно във вашето приложение

Преди да започнем, трябва да знаем къде се намира по-голямата част от данните. Размерът на едно приложение обикновено се разделя на четири основни блока. Първо, това е байткодът на Java или Kotlin и неговите библиотеки, които обикновено представляват от 30% до 40%. След това има ресурси като оформления и анимации , с подобен размер. Разполагаме и с нативните библиотеки (C/C++), компилирани за различни архитектури (15-25%), и накрая, ресурсите или суровите файлове (5-15%).

За да избегнете догадки, най-добре е да използвате APK Analyzer на Android Studio (като отидете в Build > Analyse APK). Този инструмент ви позволява да видите точно колко тежат DEX класовете, папката с ресурси и native библиотеките, което ви позволява да сравните текущите версии с предишните, за да определите точно кои промени са довели до увеличаване на размера на файла. За да се задълбочите в тази тема, е полезно да разберете файловата йерархия в Android и как са организирани файловете.

Почистване на кода: Скокът от ProGuard към R8

Намаляването на кода несъмнено е най-ефективният начин за намаляване на байтовете. Тук се намесват ProGuard и неговият съвременен наследник, R8. ProGuard беше стандартът в продължение на години, грижейки се за премахване на неизползвани класове, полета и методи , оптимизиране на байткода и обфускация на имена, за да ги направи по-къси (и по-трудни за всеки, който се опитва да хакне кода ви, за да го прочете).

APK, AAB и APKM
Свързана статия:
Разширено ръководство за разликите между форматите APK, AAB и APKM на Android: Всичко, което трябва да знаете, за да инсталирате приложения като професионалист

Днес R8 е компилаторът по подразбиране и прави всичко, което ProGuard правеше, но много по-добре и по-бързо. R8 прилага по-агресивно разклащане на дървета , слива класове с подобни функции и оптимизира изброяванията, като ги преобразува в цели числа. Освен това, позволява обеззахаряване, за да се използват съвременни функции на Java 8 в по-стари версии на Android.

Техническа конфигурация в build.gradle

За да активирате тези оптимизации в пуснатата версия, трябва да конфигурирате файла за компилация, като зададете minifyEnabled като true и свързване на файловете с правила. Важно е да се използва proguard-android-optimize.txt за да се възползвате максимално от оптимизациите. Пример за основна конфигурация би включвал поддържане на класове на приложения или тези, отбелязани с @Keep за да се предотврати случайното им изтриване от R8.

Управление на правила за външни библиотеки

Понякога R8 е твърде ефективен и изтрива код, използван чрез отражение, причинявайки грешки като ClassNotFoundExceptionЕто защо книжарниците харесват Retrofit, OkHttp или Gson изискват специфични правила.Например, при Gson е жизненоважно да се запазят имената на полетата в моделите на данни, така че десериализацията на JSON да не се провали. Ако срещнете грешки след обфускация, файлът mapping.txt Това е най-добрият ви съюзник за превод на стекови следи и за разбиране къде е възникнала грешката.

Възможно ли е да се създаде APK файл, без да се работи с програмисти?
Свързана статия:
Разлики между APKM, APKS и XAPK: Пълно ръководство за инсталационните формати на Android

Интелигентна оптимизация на ресурсите

Ресурсите често са мястото, където се губи най-много място. Една проста, но мощна техника е да се активира shrinkResources във файла build.gradle. Това премахва файлове, които нямат препратка в кода, въпреки че е важно да се знае, че ако извикате ресурс динамично, използвайки getIdentifierЩе трябва да го декларирате във файл keep.xml за да не изчезне.

Изображения и графики: По-малкото е повече

PNG форматът е отговорен за много ненужни мегабайти. Настоящата препоръка е всичко да се мигрира към WebP формат , който предлага много по-добра компресия, като същевременно се запазва качеството. Можете да извършите това преобразуване директно в Android Studio, като щракнете с десния бутон върху изображението. За икони и прости форми, Vector Drawables са идеални ; един XML файл замества пет версии с различна плътност, опростявайки поддръжката и намалявайки размера на файла.

Намаляване на езиците и гъстотата на населението

Много външни библиотеки се предлагат с преводи на 50 езика, които вашето приложение вероятно не поддържа. За да почистите това, използвайте свойството resConfigs в defaultConfigкато посочвате само езиците, които действително използвате (например "es", "en"По подобен начин можете да ограничите включените плътности на екрана, ако знаете, че целевата ви аудитория използва съвременни устройства, като премахнете ресурси ldpi или mdpi които никой вече не използва.

Извличане на APK от приложения
Свързана статия:
Пълно ръководство за извличане на APK от всяко приложение за Android: Опции, сигурност и уроци

Разширени стратегии за дистрибуция

Ако искате окончателно да намалите размера на APK файла, трябва да спрете да използвате универсални APK файлове и да преминете към Android App Bundles (.aab) . Вместо да изпраща един гигантски файл с всичко възможно, Google Play генерира оптимизиран APK файл за всяко устройство. По този начин потребител с телефон ARM64 и екран xxhdpi изтегля само това, от което се нуждае хардуерът му , намалявайки размера на изтеглянето с до 40%.

Динамични функционални модули и незабавни приложения

Не е необходимо целият код да е наличен от самото начало. С динамичните функционални модули можете да отделите части от приложението (като разширен редактор на снимки или офлайн режим), така че те да се изтеглят само когато потребителят получи достъп до тази функция. От друга страна, незабавните приложения позволяват на хората да изпробват приложението ви, без да го инсталират, като заредят изключително лек базов модул чрез URL адрес или бутон в Google Play.

Одит на зависимостите и окончателни детайли

Понякога проблемът не е в кода ви, а в това, което внасяте отвън. Библиотеки като Guava или Jackson могат да бъдат много големи; помислете за замяната им с по-леки алтернативи като kotlinx.serialization или Gson . Препоръчително е също да използвате шрифтове за изтегляне от Google Fonts, вместо да пакетирате големи TTF файлове в активите си, което може да ви спести няколко мегабайта, ако използвате множество варианти на шрифт.

За да завършите цикъла на оптимизация, не забравяйте, че Android Go е разрастващ се пазар. Ако искате приложението ви да блести на устройства с по-малко от 1GB RAM, опитайте се да поддържате размера му под 40MB. Използването на Android Lint за откриване на осиротели ресурси и поддържането на последователна рутина за почистване ще позволи на приложението ви да бъде ефективно, да се инсталира бързо и да предлага безпроблемно потребителско изживяване, независимо от мощността на устройството.

Актуализации за сигурност на Android
Свързана статия:
Как да ускорите и оптимизирате Android до максимум: пълно ръководство, съвети и основни препоръки

Добавяне като предпочитан източник в Google