我目前正在开发一个我自己的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;
}
}使用带有以下ANT脚本的yGuard,我得到一个空的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>我能请教一下我哪里做错了吗?
提前谢谢你!
发布于 2011-09-28 18:32:53
收缩元素的用法有所不同。它指定了yguard开始查找依赖类的入口点。所有无法访问的类都将被删除。通常,您只需提供如下所示的main方法:
<shrink logfile="${shrinklog}">
<keep>
<method name="void main(java.lang.String[])" class="${mainclass}" />
</keep>
</shrink>https://stackoverflow.com/questions/7160938
复制相似问题