Netbeans. Сборка обфусцированного Java-приложения
Разрабатывая приложения на языке Java, иногда приходится уменьшить размер выходного jar-файла, оптимизировать его и защитить от посторонних глаз. В этом помогает обфускатор ProGuard. Сейчас я расскажу, как это сделать в Netbeans IDE.
Первым делом нужно скачать ProGuard и распаковать его в какую-нибудь директорию. Нам нужен всего один файл lib/proguard.jar, скопируем его в папку proguard, которую создадим в корне папки Java-проекта. Например: ..\NetBeansProjects\SomeProject\proguard
Далее, в этой же папке следует создать файл конфигурации с расширением .pro, допустим это будет java.pro. Впишем в этот файл такой текст:
Остаётся только настроить Netbeans'овый Apache Ant, чтобы тот создавал обфусцированный бинарник. Для этого открываем файл build.xml и добавляем это:
Первым делом нужно скачать ProGuard и распаковать его в какую-нибудь директорию. Нам нужен всего один файл lib/proguard.jar, скопируем его в папку proguard, которую создадим в корне папки Java-проекта. Например: ..\NetBeansProjects\SomeProject\proguard
Далее, в этой же папке следует создать файл конфигурации с расширением .pro, допустим это будет java.pro. Впишем в этот файл такой текст:
-printmapping out.map -printusage out.txt -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable,Deprecated,Signature,InnerClasses -keepattributes *Annotation* -keepclasseswithmembers public class * { public static void main(java.lang.String[]); } -keepclasseswithmembernames class * { native ; } -keepclassmembers class * extends java.lang.Enum { public static **[] values(); public static ** valueOf(java.lang.String); } -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } -optimizationpasses 9 -allowaccessmodification -dontusemixedcaseclassnamesЭто слегка модифицированный файл конфигурации из примеров обфускатора. Что делает тот или иной параметр, можно посмотреть в документации на офсайте или в папке docs.
Остаётся только настроить Netbeans'овый Apache Ant, чтобы тот создавал обфусцированный бинарник. Для этого открываем файл build.xml и добавляем это:
<target name="-post-jar"> <property name="proguard.jar.path" value="proguard/proguard.jar" /> <echo message="Obfuscating ${dist.jar}..." /> <taskdef resource="proguard/ant/task.properties" classpath="${proguard.jar.path}" /> <proguard configuration="proguard/java.pro"> <injar file="${dist.jar}" /> <outjar file="${build.dir}/obfuscated.jar" /> <libraryjar path="${javac.classpath}" /> <libraryjar file="${java.home}/lib/rt.jar" /> </proguard> <move file="${build.dir}/obfuscated.jar" tofile="${dist.jar}"/> </target>Теперь сборка будет проходить чуть дольше из-за оптимизации и обфускации, зато на выходе получим обфусцированную программу. Также в папке proguard будут два файла:
- out.map - карта изменения имён классов/методов/полей.
- out.txt - список неиспользуемых классов/методов/полей. По нему можно узнать о наличии неиспользуемого кода.
Комментарии
Отправить комментарий