首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Eclipse中使用yGuard对库进行模糊化

在Eclipse中使用yGuard对库进行模糊化
EN

Stack Overflow用户
提问于 2011-08-23 20:20:44
回答 1查看 6.3K关注 0票数 5

我目前正在开发一个我自己的Java库,用于我办公室的其他应用程序,我正在探索混淆这个库本身的方法。

我正在使用Eclipse Indigo,并且使用的是yGuard v2.3.0.1。

首先,我的Java代码:

代码语言:javascript
复制
package com.test.ObfuscateTest;

public class MainClass {

    private String secretClassVariable;

    public static void main(String[] args) {

    }

    protected void SecretMethod(String secretParameter) {

        secretClassVariable = secretParameter;
    }
}

使用带有以下ANT脚本的yGuard,我得到一个空的JAR文件:

代码语言:javascript
复制
<?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>

我能请教一下我哪里做错了吗?

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-28 18:32:53

收缩元素的用法有所不同。它指定了yguard开始查找依赖类的入口点。所有无法访问的类都将被删除。通常,您只需提供如下所示的main方法:

代码语言:javascript
复制
<shrink logfile="${shrinklog}">
  <keep>
    <method name="void main(java.lang.String[])" class="${mainclass}" />
  </keep>
</shrink>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7160938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档