mitaichik
@mitaichik

ProGuard: как запретить обфускацию класса из desugaring?

Всем привет.

1. В своем проекте мы не юзаем обуфскацию - скрывать особо нечего.
2. Храним некоторые данные локально в JSON формате, в частности - даты (LocalDate, LocalDateTime). Так и писали : saveToFile(gson.toJson(date))

Решили перейти на Time API из desugaring (раньше юзали ThreeTenAB).
Все норм, но вот десериализация дат из json сломалась - даты не работают.

Точнее, в тест-билде все работает, в релизном - нет.

Начали разбираться - оказалось что все потому что классы дат из desugaring оказывались обфусцированны.

Прописывали:
-dontobfuscate
-keep class j$.time.** { *; }
-keep class java.time.** { *; }


Не помогает.
Как заставить ProGuard не обфусцировать эти классы?
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
mitaichik
@mitaichik Автор вопроса
Для истории опишу решение , мало ли кому пригодиться:

Проблема обсуждается здесь https://github.com/ZacSweers/ticktock/issues/38 и здесь https://issuetracker.google.com/issues/126429384

Суть в том что R8 при компиляции desugaring использует свои правила минимификации, и не важно что вы там написали у себя.

Но есть решение - можно добавить правила непосредственно в задачу компиляции R8

В build.gradle нужно добавить

import com.android.build.gradle.internal.tasks.L8DexDesugarLibTask

android {
    tasks.withType(L8DexDesugarLibTask) {
        keepRulesConfigurations.set(["-keepnames class j\$.time.** { *; }"])
    }
}


Тогда R8 принимает эти правила и обфускация указанных классов не происходит.
Вот пример использования такого решения https://github.com/mzdluo123/MiraiAndroid/blob/3c5...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы