2009-07-12 72 views
14

我使用ProGuard來模糊我的代碼。我的項目由幾個模塊組成,每個模塊獨立模糊處理。使用throws子句的混淆方法

一個庫包含一個接口;

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

另一個庫提供一個implmentation

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

該庫與所述接口首先被建立,而第二構建針對所述模糊版本。不幸的是編譯在@Override上失敗,因爲接口沒有throws子句。

我有proguard保持接口和它的所有成員,但我無法弄清楚如何保持throws子句。

回答

35

我想通了。

-keepattributes Exceptions

+0

謝謝!沒有你的回答,這是一場生命危機。 – Sileria 2013-03-12 09:35:59

0

示例使用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>