Proguard混淆包含POI库的胖jar在混淆后无法运行

时间:2016-11-29 10:30:53

标签: java jar apache-poi proguard obfuscation

我正在使用progaurd来混淆我的应用程序类,这是一个包含poi库的胖jar。它在混淆之前按预期运行。

但是我想只混淆应用程序类而不是其他库。为此,我在progaurd配置文件中保留以下行,以避免混淆库类。

-keep class org.apache.poi.* { *; }
-keep class org.apache.poi.** { *; }

然而,在混淆完成后,生成的混淆jar会抛出以下异常

<R ERRMSG="org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException" STATUS="3"/>

org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62)

org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:426)

org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:431)

org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:155)

org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:221)

org.pc.vr.VReport.a(VReport.java:355)

org.pc.vr.VReport.main(VReport.java:272)

我的应用程序类的第355行是

wb = new XSSFWorkbook(new FileInputStream(xlsxFilePath));

只有在我对罐子进行了劝告之后才会发生这种情况,在混淆之前罐子工作正常。

以下是我的progaurd配置文件

-injars /home/syedammar/Desktop/VEJars/vr.jar
-outjars /home/syedammar/Desktop/VEJarsObfuscated/

-libraryjars <java.home>/lib/rt.jar
-libraryjars /home/syedammar/Desktop/Library/poi-3.10/poi-3.10-FINAL-20140208.jar
-libraryjars /home/syedammar/Desktop/Library/poi-3.10/poi-excelant-3.10-FINAL-20140208.jar
-libraryjars /home/syedammar/Desktop/Library/poi-3.10/poi-ooxml-3.10-FINAL-20140208.jar
-libraryjars /home/syedammar/Desktop/Library/poi-3.10/poi-ooxml-schemas-3.10-FINAL-20140208.jar
-libraryjars /home/syedammar/Desktop/Library/poi-3.9/dom4j-1.6.1.jar
-libraryjars /home/syedammar/Desktop/Library/poi-3.9/xmlbeans-2.3.0.jar
-libraryjars /home/syedammar/Desktop/Library/javacsv.jar
-libraryjars /home/syedammar/Desktop/Library/h2-1.4.177.jar
-libraryjars <java.home>/lib/jce.jar

-printmapping /home/syedammar/Desktop/VEJarsObfuscated/vr.map
-keepattributes SourceFile,LineNumberTable
-keepattributes *Annotation*,Signature
-dontwarn
-dontnote 
-ignorewarnings
-dontusemixedcaseclassnames

-keep class org.openxmlformats.** { *; }
-keep class org.w3c.** { *; }
-keep class org.dom4j.* { *; }
-keep class org.dom4j.** { *; }
-keep class org.h2.* { *; }
-keep class org.h2.** { *; }
-keep class org.apache.poi.* { *; }
-keep class org.apache.poi.** { *; }
-keep class org.apache.xmlbeans.* { *; }
-keep class org.apache.xmlbeans.** { *; }

   # Keep - Applications. Keep all application classes, along with their     'main'
 # methods.
-keep public class org.pointcross.validationreport.ValidationReport {
 public static void main(java.lang.String[]);
 }

# Also keep - Enumerations. Keep the special static methods that are required in
# enumeration classes.
-keepclassmembers enum  * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

可能是什么问题?我需要将这个罐子当作胖罐子。

0 个答案:

没有答案