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