2009-07-12 13 views
14

Uso ProGuard per offuscare il mio codice. Il mio progetto è composto da alcuni moduli, ognuno offuscato in modo indipendente.Metodo offuscamento con clausola throws

Una libreria include un'interfaccia;

public interface IFace { 
    public int methodA(boolean b) throws CustomException; 
} 

Un'altra libreria fornisce un implmentation

public class IFaceImpl implements IFace { 
    @Override 
    public int methodA(boolean b) throws CustomException { 
     return 0; 
    } 
} 

La biblioteca l'interfaccia è costruita, e il secondo è costruito contro la versione offuscato. Sfortunatamente la compilazione fallisce su @Override in quanto l'interfaccia non ha la clausola throws.

Ho proguard che mantiene l'interfaccia e tutti i suoi membri, ma non riesco a capire come mantenere la clausola dei tiri.

risposta

35

L'ho capito.

-keepattributes Exceptions

+0

Grazie! Era una perdita di vita senza la tua risposta. – Sileria

+0

Enorme risparmio di tempo. Grazie. – dazed

0

Esempio con Maven:

<plugin> 
    <groupId>com.github.wvengen</groupId> 
    <artifactId>proguard-maven-plugin</artifactId> 
    <version>2.0.6</version> 
    <dependencies> 
     <dependency> 
      <groupId>net.sf.proguard</groupId> 
      <artifactId>proguard-base</artifactId> 
      <version>4.10</version> 
     </dependency> 
    </dependencies> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>proguard</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <proguardVersion>4.10</proguardVersion> 
     <options> 
      <option>-keepattributes Exceptions</option> 
      <option>-keep public class some.package.SomeClass{*;}</option> 
     </options> 
     <libs> 
      <lib>${java.home}/lib/rt.jar</lib> 
      <lib>${java.home}/lib/jce.jar</lib> 
      <lib>${java.home}/lib/jsse.jar</lib> 
     </libs> 
    </configuration> 
</plugin>