Как использовать ProGuard?

Я пытался научиться использовать должны быть, и это не так просто, как я думал. Сначала я нашел простой Java-код, чтобы попробовать его, просто два класса качели калькулятор.

код можно найти, перейдя по этой ссылке, но я нашел его слишком подробным, чтобы опубликовать его здесь. Во всяком случае, это простое приложение с точкой входа на 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%)

написал файл 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 функции, но без успеха. Все, что я нашел в документах, связанных с моей проблемой, не могло мне помочь. Тогда я обращаюсь к вам... Что случилось? Как это сделать правильно?

2 ответов


я получил его для работы, используя следующий файл конфигурации:

-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.


У меня были аналогичные проблемы, решаемые путем удаления модификаторов Java.

модификаторы Java, такие как модификаторы видимости, являются необязательными в Файл конфигурации ProGuard-опция keep (и в связанных опциях-keepclassmembers и т. д.)

от ручного: -держите [,модификатор,...] class_specification

поэтому, если нет конкретной причины иначе, вы можете оставить их.