2012-06-10 2 views
18

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

ответ

27

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

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

-keepnames class_specification

-keep,allowshrinking Сокращенно class_specification

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

+3

Итак, я печатаю: -keepnames com.randompackage.lol.ClassName – Nik

+0

Хорошо, есть ли способ сделать это с помощью целого пакета? – Nik

+0

Да, вы используете подстановочный знак *. ie -keepnames com.randompackage.lol. * Сохраняет все классы в lol –

24

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

-keepnames class com.somepackage.* 
9

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

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

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

+9

'' '-dontobfuscate''' - это правильный способ отключить обфускацию. –

+0

Неправильный путь. Лучше отключить обфускацию с помощью этой конфигурации: «-dontobfuscate/n -optimizations! Code/allocation/variable» – oxied

Смежные вопросы