Как использовать 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
поэтому, если нет конкретной причины иначе, вы можете оставить их.