import java.io.*;
import proguard.*;
public class 编译器
{
public boolean 编译java(String 输入java目录, String 输出class目录, String 入口类绝对路径, String 类库jar路径)
{
boolean 是否成功=true;
try
{
File file = new File(输出class目录);
file.mkdirs();
File[] listOfFiles = file.listFiles();
for(File fil : listOfFiles)
{
if(fil.isFile())
{//清空文件夹内的文件
fil.delete();
}
}
ByteArrayOutputStream 编译信息=new ByteArrayOutputStream(); //编译信息
ByteArrayOutputStream 错误信息=new ByteArrayOutputStream(); //错误信息
org.eclipse.jdt.internal.compiler.batch.Main 编译=new org.eclipse.jdt.internal.compiler.batch.Main(new PrintWriter(编译信息), new PrintWriter(错误信息), false);
String[] 命令数组 = {
"-verbose",
"-bootclasspath", 类库jar路径,
"-classpath", 输入java目录,
"-1.4",
"-target", "1.4",
"-proc:none",
"-d", 输出class目录,
入口类绝对路径
};
是否成功 = 编译.compile(命令数组);
if(是否成功)
{
//获得编译信息字符串
String 正常编译=编译信息.toString();
System.out.println(正常编译);
}
else
{
//如果失败请打印此信息
//获得错误信息字符串
String 编译错误=错误信息.toString();
System.out.println("ECJ编译java出错:"+编译错误);
}
}
catch(Exception 异常)
{
return false;
}
return 是否成功;
}
public boolean 预审核class(String 输入class目录, String 输出class目录)
{
String[] 命令数组 = new String[]
{
"-dontobfuscate", // 禁用混淆
"-dontwarn",// 禁用警告
"-keepattributes *",
"-keep class **", // 保留所有类
"-keepclassmembers class ** {*;} ", // 保留所有类成员
"-injars " + 输入class目录, // 输入class目录
"-outjars " + 输出class目录// 输出class目录
};
Configuration configuration = new Configuration();
try
{
ConfigurationParser configurationParser = new ConfigurationParser(命令数组);
configurationParser.parse(configuration);
new ProGuard(configuration).execute();
configurationParser.close();
}
catch(Exception e)
{
System.out.println("预审核出错:" + e.toString());
return false;
}
return true;
}
}