我目前正在开发自己的Java库,以便在我办公室的其他应用程序中使用,我正在探索模糊库本身的方法。
我正在使用Eclipse Indigo,并且正在使用yGuard v2.3.0.1。
首先,我的Java代码:
package com.test.ObfuscateTest;
public class MainClass {
private String secretClassVariable;
public static void main(String[] args) {
}
protected void SecretMethod(String secretParameter) {
secretClassVariable = secretParameter;
}
}
使用yGuard和以下ANT脚本,给我一个空的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>
我可以请一些关于我做错的建议吗?
提前多多感谢!
答案 0 :(得分:3)
收缩元素的用法不同。它指定了yguard开始寻找依赖类的入口点。将删除无法访问的所有类。通常你只提供这样的主要方法:
<shrink logfile="${shrinklog}">
<keep>
<method name="void main(java.lang.String[])" class="${mainclass}" />
</keep>
</shrink>