Ява Программы ProGuard. Класс keep (не удалять), но все же разрешить быть запутанным
Я хочу пропустить определенный класс из удаления. Обычно он нигде не упоминается в моем приложении, но только по отражению, поэтому он удаляется шринкером. На него ссылаются другие "соседние" классы в его пакете, но пока он не используется для моего приложения напрямую, а только отражением.
Я решил обработать специально для этого конкретного класса отображение:
org.mypckg.Helper -> gh6
...затем, конечно, я изменил вызов отражения в моем приложение:
forName("gh6")
Кажется, что нет никаких проблем с моим вводом отображения, но самого правила отображения недостаточно, чтобы предотвратить удаление класса. Кроме того, я все еще не могу сохранить класс, используя ключи-keep, потому что он сохраняет его, используя его исходное имя (org.mypckg.Помощник), чего я не хочу.
По той или иной причине я не могу вручную преломить(переименовать) класс в " gh6 " в рамках проекта.
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