Как настроить ProGuard для хранения имен внутренних членов класса?

Я хочу запутать свое приложение с помощью ProGuard, а также хочу, чтобы члены некоторых внутренних классов сохранили свои имена. Это потому, что я использую эти классы в Джексоне для преобразования в и из JSON. Мой источник:

// this class mainly serves as a container for a group of related inner classes
public class MyOuterClass
{
    public class IDontWantToKeepThisClassName1
    {
        public String IWantToKeepThisName1;
        public float IWantToKeepThisName2;
    }

    public class IDontWantToKeepThisName2
    {
        public IDontWantToKeepThisClassName1 IWantToKeepThisName3;
        public float    IWantToKeepThisName4;
    }

}

Я надеюсь, что приведенный выше код говорит сам за себя. Я пытался добиться этого с помощью этой команды в proguard-project.txt

-keepclassmembernames class com.myapppackage.MyOuterClass$**

И все же это не работает. Внутренние ученики все еще запутаны. Требуется безумное количество времени, чтобы протестировать различные варианты, пытаясь угадать правильные параметры или синтаксис, потому что каждое изменение требует экспорта пакета, чтобы увидеть, работает ли он.

1 ответ

Решение

Я уверен, что что-то вроде этого должно сработать:

-keepclassmembernames class com.myapppackage.MyOuterClass$** { *; }

Поэтому, пожалуйста, проверьте дважды. Тестирование показало, что { *; } часть необходима. Хотя я не могу объяснить почему. Может кто-то с пониманием, пожалуйста, уточните.

Другие вопросы по тегам