8.4.2013

NetBeans 7.3 ProGuard

Netbeansin obfuscointi-plugin (Proguard) asentui aikaisemmissa versioissa kiltisti nappulaa painamalla. Nyt painike ei oikeasti asentanut mitään, vaikka näytti toimivan. Toimimattomuuden
huomasi siitä, että aina projektin obfuscointi-asetuksiin mennessä samainen Proguardin asentamaan pyytävä painike tuli näkyviin ja että kääntämisen yhteydessä output-ikkunassa näkyi tällainen herja:

Obfuscator type (PROGUARD) is not found in obfuscator classpath, using NONE. Please use Plugins Manager to install the missing obfuscator library. 

Proguardia ei kuitenkaan löytynyt mainitusta managerista, joten ratkaisu vaati hieman valikkoseikkailua ja uuden plugin-repositoryn lisäämistä. Jostakin syystä Proguard on tipahtanut NetBeansin 7.3 Beta2 ja final-buildien välissä pois jakelusta, mutta lisäämällä beta2 -repon NetBeansin Plugin manageriin voi Proguardin kuitenkin asentaa normaalilla tavalla.

Vaihe 1: Lisätään NetBeans beta2 plugin-repository

Repositoryn osoite on siis http://dlc.sun.com.edgesuite.net/netbeans/updates/7.3/uc/beta2/certified/catalog.xml.gz

Vaihe 2: asennetaan Proguard -kirjasto

Kun repository on lisätty, voidaan mennä Available plugins -välilehdelle, valita Proguard Obfuscation library ja painaa Install. Tämän jälkeen projektin asetuksissa kelluva Install Proguard obfuscator -painike tekee oikeastikin sen mitä sanoo.

Ei sittenkään?

Mikäli tämäkään ei toimi, vaihtoehdoksi jää asentaa Proguard käsin jokaiseen projektiin. Tätä varten täytyy ladata Proguard (linkki SourceForgeen) ja purkaa se levylle. Purkamisen jälkeen täytyy editoida Netbeans -projektin alta löytyvää build-impl.xml -tiedostoa (nbproject/build-impl.xml) ja lisätä sinne viittaus Proguardin jar-tiedostoon. Helpoiten oikean kohdan löytää etsimällä propertyä obfuscator.classpath:

 <target name="proguard" depends="skip-obfuscation" description="Obfuscate project classes." unless="no.obfusc">
    <fail unless="obfuscated.classes.dir">Must set obfuscated.classes.dir</fail>
    <fail unless="obfuscator.srcjar">Must set obfuscator.srcjar</fail>
    <fail unless="obfuscator.destjar">Must set obfuscator.destjar</fail>

    <property name="obfuscator.classpath" value="path/to/proguard/lib/proguard.jar"/>

    <dirname file="${obfuscator.srcjar}" property="obfuscator.srcjar.dir"/>
    <dirname file="${obfuscator.destjar}" property="obfuscator.destjar.dir"/>
    <mkdir dir="${obfuscator.srcjar.dir}"/>
    <mkdir dir="${obfuscator.destjar.dir}"/>
    <jar jarfile="${obfuscator.srcjar}" basedir="${buildsystem.baton}"/>
    <property name="obfuscation.custom" value=""/>
    <nb-obfuscate srcjar="${obfuscator.srcjar}" destjar="${obfuscator.destjar}" obfuscatorclasspath="${obfuscator.classpath}" classpath="${platform.bootclasspath}:${extra.classpath}" obfuscationLevel="${obfuscation.level}" extraScript="${obfuscation.custom}"/>
    <mkdir dir="${obfuscated.classes.dir}"/>
    <unjar src="${obfuscator.destjar}" dest="${obfuscated.classes.dir}"/>
    <nb-overrideproperty name="buildsystem.baton" value="${obfuscated.classes.dir}"/>
 </target>

Tämän jälkeen projektia käännettäessä Proguard toimii projektin asetuksissa Obfuscation -välilehdellä asetettujen asetusten mukaan, vaikka Netbeans kehottaakin edelleen asentamaan Proguardin. Tämä olisi varmaankin helpointa tehdä jossakin kohtaa Ant:in asetuksia asettamalla globaali obfuscator.classpath kohdalleen, mutta en ainakaan heti keksinyt mistä näin voisi tehdä.

Ei kommentteja :

Lähetä kommentti