Как управлять обфускацией весенних добытчиков и сеттеров в yguard
Привет, я использую Ant-задачу yguard, чтобы запутать свой проект, он хорошо подходит для переименования моих java-классов и соответствующих bean-файлов в весенних XML-файлах, но, поскольку методы getter и setter также переименованы в java, имена свойств в Spring Spring не совпадают... Так что я не могу продолжить. кто-нибудь может сказать мне, как исключить сеттеры и геттеры одни от запутывания?
1 ответ
YGuard не очень хорош в этой части, но почему бы вам не попробовать ProGaurd?
Вы можете обратиться к разделу примеров ProGaurd ( http://proguard.sourceforge.net/index.html), в котором говорится:
Обработка классов бобов
Если ваше приложение, апплет, сервлет, библиотека и т. Д. Широко используют интроспекцию классов bean-компонентов для поиска классов редактора bean-компонентов или методов getter и setter, то конфигурация может стать болезненной. Вы ничего не можете сделать, кроме как убедиться, что имена классов компонентов или имена методов получения и установки не меняются. Например:
-keep public class mypackage.MyBean {
public void setMyProperty(int);
public int getMyProperty();
}
-keep public class mypackage.MyBeanEditor
Если слишком много элементов для явного перечисления, могут быть полезны подстановочные знаки в именах классов и сигнатурах методов. Этот пример должен охватывать все возможные методы установки и получения в классах в пакете mybeans:
-keep class mybeans.** {
void set*(***);
void set*(int, ***);
boolean is*();
boolean is*(int);
*** get*();
*** get*(int);
}
Подстановочный знак '***' соответствует любому типу (примитив или не примитив, массив или не массив). Методы с аргументами 'int' соответствуют свойствам, которые являются списками.
и если вы также используете аннотации в своем приложении:
Внедрение ресурсов обработки
Если ваше приложение использует внедрение ресурсов в стиле Java EE, контейнер приложения автоматически назначит экземпляры классов ресурсов полям и методам, аннотированным @Resource. Контейнер применяет самоанализ, даже напрямую обращаясь к членам частного класса. Обычно он создает имя ресурса на основе имени типа и имени члена класса. Затем мы должны избежать, чтобы такие члены класса были удалены или переименованы:
-keepclassmembers class * {
@javax.annotation.Resource *;
}
У среды Spring есть другая похожая аннотация @Autowired:
-keepclassmembers class * {
@org.springframework.beans.factory.annotation.Autowired *;
}