我正试图学习如何使用ProGuard,它不像我想象的那么容易。起初,我发现了一个简单的Java代码来试用它,一个简单的two class Swing calculator。如何使用ProGuard?
该代码可以通过下面的链接找到,但我发现它太详细发布它在这里。无论如何,这是一个简单的应用程序,入口点在Calc.main()
,没有软件包。
然后我编译两个来源:
$ javac *.java
并创建了.jar
文件(因为它看起来的ProGuard只能用罐子工作):
$ jar cvef Calc calc.jar *.class
added manifest
adding: Calc.class(in = 3869) (out= 2126)(deflated 45%)
adding: Calc$ClearListener.class(in = 468) (out= 327)(deflated 30%)
adding: CalcLogic.class(in = 1004) (out= 515)(deflated 48%)
adding: Calc$NumListener.class(in = 1005) (out= 598)(deflated 40%)
adding: Calc$OpListener.class(in = 1788) (out= 1005)(deflated 43%)
写命名obfuscate.pro
ProGuard的文件:
-injars calc.jar
-outjars calc_obf.jar
-libraryjars <java.home>/lib/rt.jar
-keep public class Calc extends javax.swing.JFrame {
public static void main(java.lang.String[]);
}
最后运行ProGuard:
$ ~/progs/proguard/proguard4.8/bin/proguard.sh @obfuscate.pro
ProGuard, version 4.8
Reading program jar [/home/lucas/tmp/calc.jar]
Reading library jar [/usr/lib/jvm/java-7-openjdk-i386/jre/lib/rt.jar]
Error: The output jar is empty. Did you specify the proper '-keep' options?
好吧,显然没有工作。我厌倦了与ProGruard参数混淆,特别是-keep
选项,但没有成功。我在与我的问题相关的文档中找到的所有内容都无法帮助我。然后我诉诸于你...什么是错的?如何做到这一点?
你的'main'方法是大写的,这几乎肯定不是。 –
@LouisWasserman对,修正。仍然有同样的问题。 – lvella
这对我来说很好。你能上传你的jar和你的ProGuard配置吗,所以我们可以测试解决方案,而不是猜测你电脑上可能出现了什么问题? –