Подтвердить что ты не робот

Proguard сохранить имена классов?

Привет, я пишу приложение для Android, и я установил Proguard для обфускации моего приложения. Однако я использую classloader для динамической загрузки различных расширений в мое приложение. Проблема в том, что они неправильно загружаются, если их имена изменены. Как сохранить Proguard от обфускации определенных имен классов?

4b9b3361

Ответ 1

Используйте параметр -keepnames в вашем proguard.cfg

Обратитесь к руководству https://www.guardsquare.com/en/proguard/manual/usage#keepoptions:

-keepnames class_specification

Сокращение для -keep,allowshrinking class_specification

Указывает классы и члены класса, имена которых должны быть сохранены, если они не удалены на этапе сокращения. Например, вы можете захотеть сохранить все имена классов классов, реализующих интерфейс Serializable, чтобы обработанный код оставался совместимым с любыми первоначально сериализованными классами. Классы, которые не используются вообще, могут быть удалены. Применяется только при запутывании.

Ответ 2

Это сохраняет классные имена неповрежденными:

-keepnames class com.somepackage.* 

Ответ 3

Удобный совет для всех, кто не хочет, чтобы ProGuard менял любое имя класса:

# please KEEP ALL THE NAMES
-keepnames class ** { *; }

Таким образом, вы получите читаемые трассировки стека, оставаясь при этом ненужными вещами.: -)

Ответ 4

Если кому-то интересно, как указать несколько имен классов для хранения, то эти классы могут быть разделены запятой. Пример:

-keepnames class com.foo.**,com.bar.** { *; }

С этим также можно использовать отрицание, так как обычно собственные классы скрываются, могут быть сохранены сторонние библиотеки ОС:

-keepnames class !com.foo.**,!com.bar.** { *; }

Смотрите документацию Proguard для этого.