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

ProGuard - это инструмент для обфускации кода, используемый в Android для защиты приложений от обратной разработки. Однако в некоторых случаях может понадобиться запретить обфускацию конкретного класса, особенно если он используется в процессе desugaring.

Desugaring - это процесс преобразования кода, написанного с использованием новых функций языка Java или Kotlin, в код, которому понимают более старые версии Android. Он применяется, когда вы пишете код, используя новые функции языка, которые отсутствуют в вашей минимальной версии API.

Чтобы запретить обфускацию класса из desugaring, вы можете использовать аннотацию @DoNotObfuscate. Когда вы помечаете класс этой аннотацией, ProGuard определит, что этот класс не должен быть обфусцирован.

Вот как можно использовать аннотацию @DoNotObfuscate:

import androidx.annotation.DoNotObfuscate;

@DoNotObfuscate
public class MyDesugaringClass {
    // Код класса
}

Когда ProGuard будет обрабатывать ваш код, он будет игнорировать обфускацию класса MyDesugaringClass, поскольку его пометили аннотацией @DoNotObfuscate.

Кроме того, в Android Gradle Plugin 4.1 и выше вы можете использовать новый механизм обфускации - R8. Это новый инструмент для обфускации и минификации кода, его разработка ведется в Google. R8 также поддерживает аннотацию @DoNotObfuscate.

import com.android.tools.r8.DoNotObfuscate;

@DoNotObfuscate
public class MyDesugaringClass {
    // Код класса
}

Использование @DoNotObfuscate с R8 аналогично использованию с ProGuard. Он указывает R8 на то, что конкретный класс не должен быть обфусцирован.

В заключение, использование аннотации @DoNotObfuscate является способом запретить обфускацию класса из desugaring при использовании ProGuard или R8 в проекте Android. Это полезное средство, которое позволяет сохранить целостность кода и поддержать совместимость с различными версиями API Android.