Обфускация - это процесс изменения исходного кода или байт-кода приложения таким образом, чтобы его стало сложнее понять или декомпилировать, при этом сохраняя функциональность.
Основные цели обфускации:
В Android обфускация обычно выполняется на уровне байт-кода JVM (.dex файлы). Наиболее распространенный инструмент для этого - R8, который интегрирован в Android Gradle Plugin. Ранее использовался ProGuard, но R8 стал его заменой по умолчанию, предоставляя лучшую производительность и возможности.
Принцип работы R8/ProGuard (упрощенно):
Конфигурация обфускации задается в файлах правил (например, proguard-rules.pro). В этих файлах можно указать, какие классы, методы или поля не должны быть обфусцированы или удалены. 这是至关重要的,否则应用可能会因为反射、JNI 或与外部库的集成而崩溃。
Примеры правил:
pro
После обфускации R8 генерирует файл mapping.txt, содержащий соответствие между оригинальными именами и обфусцированными. Этот файл необходим для деобфускации стектрейсов, что упрощает анализ крэшей в продакшене.
Недостатки обфускации:
В целом, обфускация является важным шагом в процессе сборки релизных APK для защиты приложения, но требует тщательной настройки и тестирования. Современные инструменты типа R8 делают этот процесс более простым и эффективным.