当我要生成分发它的版本时,我有一个类使用 Ofuscated String 调用覆盖所有常量:
这是过程:
- 我运行我的 ANT,将所有代码复制到其他地方。
- 对 OfuscateJavaConstant 的 ANT 调用。
- 我编译代码。
蚂蚁:
<java classname="de.schlichtherle.util.ObfuscatedString">
<arg value="${of.constant}" />
<classpath>
<pathelement location="${exit.path}/${buildDir}" />
<path refid="myclasspath" />
</classpath>
</java>
Java Ofuscate 代码(ObfuscatedString):
public static void main(String[] args) {
if ( args!=null ){
String[] ficheros = args[0].split(";");
if ( args!=ficheros )
for (String ruta:ficheros)
ofuscateConstantClass( ruta );
}
}
private static void ofuscateConstantClass( String fileName ){
File archivo = null;
FileReader fr = null;
BufferedReader br = null;
List<String> sb = new ArrayList<String>();
FileWriter fichero = null;
PrintWriter pw = null;
try{
archivo = new File( fileName );
fr = new FileReader (archivo);
br = new BufferedReader(fr);
String linea;
while( (linea=br.readLine())!=null ){
String noWhite = linea.trim().replaceAll(" +", " ");
if ( noWhite.toLowerCase().startsWith("public static final string") && noWhite.endsWith("\";") ){
String firstPart = noWhite.substring(0, noWhite.indexOf("\"") );
String constant = noWhite.substring(noWhite.indexOf("\"")+1, noWhite.lastIndexOf("\"") );
String ofuscatedConstant = obfuscate( constant );
String secondPart = noWhite.substring(noWhite.lastIndexOf("\"")+1 );
sb.add( firstPart + ofuscatedConstant + secondPart );
System.out.println( constant + "-->" + ofuscatedConstant );
} else
sb.add( linea );
}
fichero = new FileWriter( fileName );
pw = new PrintWriter(fichero);
for (String s:sb)
pw.println( s );
} catch ( Exception e){
} finally {
try{
if( null != fr )
fr.close();
if( null != pw )
pw.close();
if( null != fichero )
fichero.close();
}catch (Exception e2){
e2.printStackTrace();
}
}
}
希望能帮助到你 :)