我正試圖學習如何使用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配置嗎,所以我們可以測試解決方案,而不是猜測你電腦上可能出現了什麼問題? –