Ява Программы ProGuard. Класс keep (не удалять), но все же разрешить быть запутанным


Я хочу пропустить определенный класс из удаления. Обычно он нигде не упоминается в моем приложении, но только по отражению, поэтому он удаляется шринкером. На него ссылаются другие "соседние" классы в его пакете, но пока он не используется для моего приложения напрямую, а только отражением.

Я решил обработать специально для этого конкретного класса отображение:

org.mypckg.Helper -> gh6

...затем, конечно, я изменил вызов отражения в моем приложение:

forName("gh6")

Кажется, что нет никаких проблем с моим вводом отображения, но самого правила отображения недостаточно, чтобы предотвратить удаление класса. Кроме того, я все еще не могу сохранить класс, используя ключи-keep, потому что он сохраняет его, используя его исходное имя (org.mypckg.Помощник), чего я не хочу.

По той или иной причине я не могу вручную преломить(переименовать) класс в " gh6 " в рамках проекта.

1 4

1 ответ:

ProGuard распознает конструкцию Class.forName("org.mypckg.Helper"); затем она сохраняет и запутывает org.mypckg.Helper без дальнейшей настройки.

В противном случае:

-keep,allowobfuscation class org.mypckg.Helper
-adaptclassstrings org.mypckg.AdjacentClass*

Cfr. ProGuard manual > Usage > обзор опций Keep

Cfr. ProGuard manual > Usage > - adaptclassstrings