2009-07-12 13 views
14

J'utilise ProGuard pour masquer mon code. Mon projet est composé de quelques modules, chacun obfusqué indépendamment.Obfuscating avec throws clause

Une bibliothèque comprend une interface;

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

Une autre bibliothèque fournit une implmentation

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

La bibliothèque de l'interface est construite d'abord, et le second est construit contre la version obscurcie. Malheureusement, la compilation échoue sur le @Override car l'interface n'a pas la clause throws.

J'ai proguard garder l'interface et tous ses membres, mais je ne peux pas comprendre comment garder la clause throws.

Répondre

35

Je l'ai compris.

-keepattributes Exceptions

+0

Merci! C'était un gaspilleur de vie sans votre réponse. – Sileria

+0

Un gain de temps énorme. Merci. – dazed

0

Exemple avec 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>