8

ProGuardの使用方法を学ぼうとしていましたが、思ったほど簡単ではありません。最初に、単純な2 クラスの Swing 計算機を試すための単純な Java コードを見つけました。

コードはそのリンクをたどることで見つけることができますが、ここに投稿するには冗長すぎることがわかりました。とにかく、これはエントリ ポイントがオンになっている単純なアプリケーションで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オプションをいじるのにうんざりしましたが、成功しませんでした。私の問題に関連するドキュメントで見つけたものはすべて、私を助けることができませんでした. それから私はあなたに頼っています. 何が問題なのですか? それを正しく行う方法は?

4

3 に答える 3

6

次の構成ファイルを使用して動作するようにしました。

-injars       calc.jar
-outjars      calc_obf.jar
-libraryjars  <java.home>/lib/rt.jar
-keep class Calc {
  public static void main(java.lang.String[]);
}

最も顕著なのはpublic、 の前にある を捨てたことですclass Calc

于 2012-08-24T18:39:21.933 に答える
1

同様の問題があり、Java修飾子を削除することで解決しました。

可視性修飾子などの Java 修飾子は、ProGuard 構成ファイルの -keep オプション (および関連オプション -keepclassmembers など) ではオプションです。

マニュアルから: -keep [,modifier,...] class_specification

そのため、特別な理由がない限り、それらを省略できます。

于 2014-02-04T19:15:25.537 に答える