2011-08-23 11 views
5

Obecnie tworzę własną bibliotekę Java do wykorzystania w innych aplikacjach w moim biurze i szukam sposobów zaciemniania samej biblioteki.Używanie yGuard do zaciemniania biblioteki w Eclipse

Pracuję z Eclipse Indigo i używam yGuard v2.3.0.1.

Po pierwsze, mój kod Java:

package com.test.ObfuscateTest; 

public class MainClass { 

    private String secretClassVariable; 

    public static void main(String[] args) { 

    } 

    protected void SecretMethod(String secretParameter) { 

     secretClassVariable = secretParameter; 
    } 
} 

Korzystanie yGuard z poniższego skryptu Ant, siatki mi pusty plik JAR:

<?xml version="1.0" encoding="UTF-8"?> 

<project name="project" default="yguard" basedir="."> 

    <target name="init"> 
     <property name="project_name" value="ObfuscateTest"/> 
     <property name="srcDir" value="."/> 
     <property name="classDir" value="classes"/> 
     <property name="jar" value="${project_name}.jar"/> 
     <property name="obfjar" value="${project_name}_obf.jar"/> 
     <property name="renamelog" value="${project_name}_renamelog.xml"/> 
     <property name="shrinklog" value="${project_name}_shrinklog.xml"/> 
     <property name="mainclass" value="com.test.ObfuscateTest"/> 
     <mkdir dir="${classDir}" /> 
    </target> 


    <target depends="jar" name="yguard"> 
     <taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="/Users/foo/Desktop/yguard-2.3.0.1/lib/yguard.jar"/> 
     <!-- the following can be adjusted to your needs --> 
     <yguard> 

      <inoutpair in="${jar}" out="${obfjar}"/> 

      <!-- don't let the obfuscator remove the "Deprecated" --> 
      <!-- attributes from the .class file entries --> 
      <attribute name="Deprecated"/> 

      <shrink logfile="${shrinklog}"> 
       <keep> 
        <class classes="none" methods="protected" fields="none"> 
          <patternset> 
           <include name="com.test.ObfuscateTest.*"/> 
          </patternset> 
          </class> 
       </keep> 
      </shrink> 

      <rename mainclass="${mainclass}" logfile="${renamelog}"> 
       <keep> 
        <class classes="none" methods="protected" fields="none"> 
          <patternset> 
           <include name="com.test.ObfuscateTest.*"/> 
          </patternset> 
          </class> 
       </keep> 
      </rename> 

     </yguard> 

    </target> 

    <!-- compile --> 
    <target name="compile" depends="init"> 
     <javac srcdir="${srcDir}" includes="com/test/ObfuscateTest/*.java" destdir="${classDir}"> 
     </javac> 
    </target> 

    <!-- create .jar --> 
    <target name="jar" depends="compile"> 
     <jar jarfile="${jar}" basedir="${classDir}" includes="com/test/ObfuscateTest/*"/> 
    </target> 

    <!-- run project --> 
    <target name="run" depends="yguard"> 
     <java classname="${mainclass}" fork="true"> 
      <classpath> 
       <pathelement location="${obfjar}"/> 
      </classpath> 
     </java> 
    </target> 

    <!-- removes all that has been built --> 
    <target name="clean" depends="init"> 
     <delete dir="${classDir}" includeEmptyDirs="true" /> 
    </target> 
</project> 

Czy mogę uprzejmie prosić o radę, co ja Robię źle?

Bardzo dziękuję z góry!

+0

Dlaczego ukrywasz kod, który będzie używany w twoim biurze? –

+0

Biblioteka zostanie potencjalnie udostępniona zewnętrznym programistom, a zatem będzie potrzebna do zaciemniania. – Earthling

+0

Cóż, udało mi się, że ProGuard dość dobrze zaciemnił mój kod, więc to jeden z nich, ale chciałbym się dowiedzieć, czy jest jakiś sposób, żeby YGuard zadziałał. – Earthling

Odpowiedz

3

Element kurczliwy powinien być używany inaczej. Określa punkty wejścia, od których yguard rozpoczyna wyszukiwanie klas zależnych. Wszystkie klasy, do których nie można dotrzeć, są usuwane. Zwykle wystarczy podać główną metodę podobną do tej:

<shrink logfile="${shrinklog}"> 
    <keep> 
    <method name="void main(java.lang.String[])" class="${mainclass}" /> 
    </keep> 
</shrink> 
+0

Wynik końcowy jest wciąż taki sam - niewielki plik jar o pojemności 350 bajtów bez klas wewnątrz. (Tylko folder Meta-INF). Wyjście błędu: Nie udało się załadować atrybutu manifestu klasy głównej z C: \ Users \ foo \ Java \ ObsfucateTest \ src \ ObfuscateTest.jar Twoja pomoc jest jednak bardzo doceniana. – David

+0

Zdarza się to również bez linii obkurczających w xml. – David

+0

Po prostu próbowałem tego i myślę, że moja odpowiedź jest poprawna. Przy pierwotnej konfiguracji zmniejszania MainClass jest usuwany, a plik JAR pusty. W mojej konfiguracji skurczu klasa jest zachowywana. Proszę spojrzeć, czy ObfuscateTest.jar jest pusty, czy nie, ponieważ jest to dane wejściowe do yguard. Może masz problem z układem katalogu. –

Powiązane problemy