2011-08-23 16 views
5

'de kütüphaneyi gizlemek için yGuard'ı kullanma Şu anda ofisimde bulunan diğer uygulamalarda kullanılmak üzere bir Java kütüphanesi geliştiriyorum ve kütüphanenin kendisini gizleme yollarını araştırıyorum.Eclipse

Eclipse Indigo ile çalışıyorum ve yGuard v2.3.0.1 kullanıyorum.

Öncelikle, benim Java kodu:

package com.test.ObfuscateTest; 

public class MainClass { 

    private String secretClassVariable; 

    public static void main(String[] args) { 

    } 

    protected void SecretMethod(String secretParameter) { 

     secretClassVariable = secretParameter; 
    } 
} 

aşağıdaki ANT komut dosyası ile yGuard kullanarak, bana boş JAR dosyasını ağlar:

<?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> 

Ben nazikçe olarak bir tavsiye isteyebilir misin ne yanlış mı yapıyorum?

Çok önceden teşekkürler!

+0

Ofisinizde kullanılacak kodu neden gizliyorsunuz? –

+0

Kütüphane, potansiyel olarak üçüncü taraf geliştiricilere bırakılacak, bu nedenle gizleme ihtiyacı ortaya çıkacak. – Earthling

+0

ProGuard'ı kodumu oldukça iyi bir şekilde gizlemek için aldım, bu yüzden bu bir aşağı, ama çalışmak için yGuard almanın bir yolu olup olmadığını bilmek isterim. – Earthling

cevap

3

Daralan elemanın farklı şekilde kullanılması amaçlanmıştır. Yguard'ın bağımlı sınıflar aramaya başladığı giriş noktalarını belirtir. Ulaşılamayan tüm sınıflar kaldırılır. Genellikle şu ana yöntemi sağlayın:

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

Sonuç hala aynı - İçinde sınıfsız küçük bir 350byte kavanoz dosyası. (Sadece Meta-INF) klasörü. Hata çıkışı: Ana Sınıf manifest niteliğini C yüklenemedi: \ Users \ foo \ Java \ ObsfucateTest \ src \ ObfuscateTest.jar Yardımınız yine de çok takdir ediliyor. – David

+0

Ayrıca xml içinde küçültme çizgileri olmadan da gerçekleşir. – David

+0

Bunu denedim ve cevabımın doğru olduğunu düşünüyorum. Orijinal shrink konfigürasyonunuz ile MainClass kaldırılır ve JAR dosyası boştur. Shrink konfigürasyonumla sınıf korunur. Lütfen ObfuscateTest.jar'in boş olup olmadığını bir göz atın, çünkü bu yguardın girdisidir. Belki dizin düzeninizde bir sorun var. –