减少HtmlUnit库jar大小

时间:2013-06-19 22:20:31

标签: jar obfuscation proguard htmlunit

您好我已经使用HTMLUnit编写了一个脚本,该脚本获取给定网址的网页并对其执行某些操作。例如,在页面上搜索字符串或单击链接等。我正在使用eclipse IDE创建一个可运行的jar。

HTML-Unit由大约21个不同的库jar组成,我在我的单个最终runnable jar中提取。这些依赖性导致单个jar占用大约9.3MB的空间。我一直在尝试使用混淆来减少单个jar大小。我正在使用名为proguard的工具。

这是一个示例proguard配置,用于混淆一个名为“commons-logging-1.1.1.jar”的库jar:

 `-libraryjars  <java.home>/lib/rt.jar

  -injars       C:/Users/Desktop/Jars/commons-logging-1.1.1.jar

  -outjar       C:/Users/Desktop/SmallJars/commons-logging-1.1.1.jar

  -printmapping C:/Users/Desktop/SmallJars/out_commons-logging-1.1.1.map

  -renamesourcefileattribute SourceFile

  -dontnote

  -keepattributes InnerClasses,SourceFile,LineNumberTable,Deprecated

  -keep public class * {
   public protected *;
   }

  -keepclassmembernames class * {
   java.lang.Class class$(java.lang.String);
   java.lang.Class class$(java.lang.String, boolean);
   }

   -keepclasseswithmembernames class * {
    native <methods>;
    }

   -keepclassmembers class * implements java.io.Serializable 
    {
    static final long serialVersionUID;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
    }`

配置与proguard网站上使用的配置几乎相同 - &gt;典型的图书馆在使用这21个简化的jar并在运行它的eclipse中重建项目时,脚本在运行时失败,但有例外:

“java.lang.NoSuchMethodException:org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext()”

看起来我已经混淆了各个罐子的方式,现在找不到某些方法。你能否指导一下导致这些例外的原因。并且上面的配置文件有问题。如果 那么这种情况下最好的proguard配置是什么。

我知道其他成员正在追逐类似的问题。问题发布在链接:

[链接](Determine used libraries to reduce JAR file size

谢谢!

1 个答案:

答案 0 :(得分:0)

通过反射访问该方法,ProGuard无法通过静态分析了解该方法。您必须在配置中保留它。 (CFR)。 ProGuard手册&gt;疑难解答&gt; NoSuchMethodException

整体处理应用程序比单独处理库更有效,因为ProGuard可能会删除完全未使用的库或至少删除它们的大部分库。