Как избежать того, что proguard запутывает классы, аннотированные с помощью @OnStart

В приложениях, основанных на платформе NetBeans 7.2, можно заменить классы ModuleInstall следующим кодом:

import org.openide.modules.OnStart;
import org.openide.modules.OnStop;

@OnStart
public final class Installer implements Runnable {

   @Override
   public void run() {
       System.out.println("enable something...");
   }

   @OnStop
   public static final class Down implements Runnable {
       @Override
       public void run() {
           System.out.println("disable something...");
       }
   }
}

Моя проблема в том, что после обфускации загрузчик классов не находит аннотированные классы.

В конфигурацию Proguard я добавил (как предложено здесь)

-keep @org.openide.modules.OnStart class *

Но видимо этого недостаточно или он не работает.

У кого-нибудь есть предложение?


person Angelo    schedule 19.10.2012    source источник
comment
@jolivier -keepattributes *Annotation* не помогает.   -  person Angelo    schedule 10.01.2013


Ответы (2)


Насколько я понял, вам нужно явно сохранять аннотации, которые вы используете для сохранения любых спецификаций. Итак, в вашем случае добавление

-keep enum org.openide.modules.OnStart

позволит использовать эту аннотацию в качестве селектора. Proguard действительно должен включать предупреждающее сообщение, если селекторы аннотаций на самом деле не совпадают. Также не имеет смысла сохранять аннотацию, особенно если она не предназначена для хранения во время выполнения.

person Pawel Veselov    schedule 08.05.2013

Вы пробовали -keepattributes *Annotation*? Это может помочь, основываясь на использовании proguard.

person jolivier    schedule 01.12.2012