我正在尝试学习如何使用ProGuard,但这并不像我想象的那么容易。一开始我找了一个简单的Java代码试了一下,一个简单的二类Swing计算器。
可以通过该链接找到代码,但我发现它太冗长,无法在此处发布。无论如何,它是一个入口点 on 的普通应用程序,Calc.main()
没有包。
然后我编译了这两个源:
$ javac *.java
并创建了.jar
文件(因为 ProGuard 似乎只适用于 jars):
$ 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%)
编写了名为的 ProGuard 文件obfuscate.pro
:
-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
选项,但没有成功。我在与我的问题相关的文档中找到的所有内容都无法帮助我。那我求助于你……怎么了?怎么做才对?