Извините, если я пропустил ответ, который бы покрыл это, но я старался найти что-то подобное.Proguard keepclassmembers сохраняет класс
Я действительно смущен поведением Проврага, и мне интересно, не читаю ли я документы или неправильно.
Я хочу сохранить аннотированные поля и элементы в классе, если этот класс сохранен. Поэтому я использовал keepclassmembers
как так:
-keepclassmembers class com.mycompany.** {
@com.mycompany.**
public com.mycompany.** *;
@com.mycompany.**
public void *(com.mycompany.**);
}
(. Эта конфигурация была построена GUI, но я думаю, что я вижу, что он делает) В Proguard документы говорят
-keepclassmembers [модификатор, ...] class_specification
Определяет класс, который необходимо сохранить, если их классы также сохранены. Например, вы можете сохранить все поля сериализации и методы классов, реализующих интерфейс Serializable.
Звучит хорошо. Но я получаю классы, которых я не ожидаю в выходе, просто потому, что у них есть @annotated прослушиватели. -whyareyoukeeping class com.company.MyServiceImpl
?
com.mycompany.MyServiceImpl
is invoked by com.mycompany.MyServiceImpl: void handleEvent(com.mycompany.MyEvent) (34:35)
is kept by a directive in the configuration.
handleEvent
просто вызывает другой метод в MyServiceImpl
, так это, кажется, не является достаточным основанием, чтобы держать весь класс, но это только кажется, что я могу думать.
Почему keepclassmembers
, кажется, вынуждают keep
на любой класс, содержащий указанный член, а не только «если их классы также сохранены»? Но более непосредственно, как я могу публиковать слушателей аннотированных событий в классах, которые Proguard уже поддерживает с помощью других правил?
Я закончил с чем-то работоспособным следующим образом. -keepclassmembers, allowobfuscation class com.ycompany. ** {@ com.mycompany. **; } -keepclassmembers, позволяет использовать, разрешать, разрешать класс класса com.yompany. ** {@ com.mycompany. ** ; } Я думаю, что модификаторы «разрешить» были волшебным соусом, но эта комбинация озадачивает - кажется, что она отменяет всю директиву. Надеюсь, это даст кому-то некоторые идеи в будущем, которые могут спасти их пару часов. –
Justin