2011-08-23 39 views
5

Tôi hiện đang phát triển một thư viện Java của riêng mình để được sử dụng trong các ứng dụng khác trong văn phòng của tôi và tôi đang khám phá các cách làm xáo trộn chính thư viện đó.Sử dụng yGuard để che giấu thư viện trong Eclipse

Tôi đang làm việc với Eclipse Indigo và đang sử dụng yGuard v2.3.0.1.

Thứ nhất, mã Java của tôi:

package com.test.ObfuscateTest; 

public class MainClass { 

    private String secretClassVariable; 

    public static void main(String[] args) { 

    } 

    protected void SecretMethod(String secretParameter) { 

     secretClassVariable = secretParameter; 
    } 
} 

Sử dụng yGuard với kịch bản ANT sau, lưới cho tôi một tập tin JAR trống:

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

thể tôi vui lòng yêu cầu một số lời khuyên như những gì tôi đang làm sai?

Cảm ơn rất nhiều trước!

+0

Tại sao bạn làm xáo trộn mã sẽ được sử dụng trong văn phòng của bạn? –

+0

Thư viện có khả năng sẽ được phát hành cho các nhà phát triển bên thứ ba, do đó, sự cần thiết phải obfuscation. – Earthling

+0

Vâng, tôi đã nhận được ProGuard để che giấu mã của tôi khá tốt, vì vậy đó là một trong những xuống, nhưng tôi muốn biết nếu có bất kỳ cách nào để có được yGuard để làm việc. – Earthling

Trả lời

3

Phần tử thu nhỏ được sử dụng khác nhau. Nó chỉ định các điểm vào mà từ đó yguard bắt đầu tìm kiếm các lớp phụ thuộc. Tất cả các lớp không thể truy cập được xóa. Thông thường bạn chỉ cần cung cấp phương pháp chính như sau:

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

Kết quả cuối cùng vẫn giữ nguyên - Một tệp jar nhỏ 350byte không có lớp bên trong. (Chỉ là thư mục Meta-INF). Đầu ra lỗi là: Không thể tải thuộc tính tệp kê khai chính từ C: \ Users \ foo \ Java \ ObsfucateTest \ src \ ObfuscateTest.jar Trợ giúp của bạn được đánh giá rất cao. – David

+0

Nó cũng xảy ra mà không có các đường co lại trong xml hoàn toàn. – David

+0

Tôi vừa thử điều này, và tôi nghĩ câu trả lời của tôi là chính xác. Với cấu hình thu nhỏ ban đầu của bạn, MainClass bị xóa và tệp JAR trống. Với cấu hình thu nhỏ của tôi, lớp được giữ lại. Vui lòng xem liệu ObfuscateTest.jar có trống hay không, vì đó là đầu vào cho yguard. Có thể bạn gặp sự cố trong bố cục thư mục của mình. –

Các vấn đề liên quan