R8 full mode
Не так давно обновил проект до Gradle 8 и получил краш в релизной сборке⚪️ . Все из-за включенного по умолчанию R8 full mode. Прежде чем разберемся, что поменялось, давайте для начала вспомним, кто такой этот ваш R8.
☢️ R8 — это утилита для удаления лишнего кода, его минификации и оптимизации
Как работает
⚙️ Строит граф от рутов, помеченных -keep в правилах proguard, и удаляет все до чего не смог дотянуться
Причем тут proguard
⚙️ Ранее в Android использовался аналог R8 под названием ProGuard, правила остались для совместимости
Когда запускается
⚙️ Во время сборки с включенным флагом isMinifyEnabled
Где может стрельнуть
⚙️ При использовании рефлексии или JNI
Что за full mode
⚙️ Включает более агрессивный режим и вырезает еще больше кода. Например, классы, создаваемые только через рефлексию, должны явно помечаться через -keep правило. Также R8 удаляет сигнатуру дженериков, что стрельнуло у меня в связке Retrofit + RxJava2
❗️ Вообще хорошей практикой считается то, когда либа уже содержит необходимые правила для R8 и вам не нужно об этом задумываться, но так бывает не всегда. Например, GSON только с последней версии стал включать правила по-умолчанию, но и это работает не для всех кейсов.
📌 Подробнее почитать про R8 full mode и известные проблемы можно тут, но эти правила мне не помогли, поэтому в комментах напишу, что помогло.
Также если хотите глубже погрузиться в правила ProGuard, то рекомендую официальный мануал и андроидовскую доку.
Столкнулись ли вы с подобной проблемой на своем проекте❓
#Android #R8 #ProGuard
Не так давно обновил проект до Gradle 8 и получил краш в релизной сборке
Как работает
Причем тут proguard
Когда запускается
Где может стрельнуть
Что за full mode
Также если хотите глубже погрузиться в правила ProGuard, то рекомендую официальный мануал и андроидовскую доку.
Столкнулись ли вы с подобной проблемой на своем проекте
#Android #R8 #ProGuard
Please open Telegram to view this post
VIEW IN TELEGRAM