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