使用ProGuard后的InvocationTargetException

时间:2012-12-28 06:30:22

标签: java ant obfuscation proguard executable-jar

我使用Eclipse Ant脚本使用ProGuard对我的jar进行模糊处理。

我使用的配置文件与此answer几乎完全相同。我刚刚使用-libraryjars选项添加了对正确库的更多引用,并使用-dontnote

省略了两个警告

之后,我将生成的jar包含在带有这些库的胖罐中。如果使用上面提到的.cfg,它可以正常工作。

但没有做太多混淆。在examples for typical application中,据说使用

-keep public class mypackage.MyMain {
    public static void main(java.lang.String[]);
}

所以这个改变了

-keep public class * {
    public protected *;
}

重新生成新的胖罐后,它会抛出异常:

    Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)
Caused by: java.lang.NullPointerException
        at mypackage.a.d.a.a(SourceFile:11)
        at mypackage.a.d.a.a(SourceFile:44)
        at mypackage.MyMain.main(SourceFile:61)
        ... 5 more

我该如何解决?请给我一些建议如何更多地研究这个问题。

1 个答案:

答案 0 :(得分:1)

我能够通过使用JD Java Decompiler检查混淆的jar来解决这个特定问题。

在那里有一条线:

String path = JarEclipse.class.getResource("MyClass.class").toString();

导致NullPointerException,因为getResource返回null,因为MyClass.class已重命名。