您好我已经使用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)
谢谢!
答案 0 :(得分:0)
通过反射访问该方法,ProGuard无法通过静态分析了解该方法。您必须在配置中保留它。 (CFR)。 ProGuard手册&gt;疑难解答&gt; NoSuchMethodException
整体处理应用程序比单独处理库更有效,因为ProGuard可能会删除完全未使用的库或至少删除它们的大部分库。