我正在使用AST Parser(不在Eclipse环境中工作)反编译apks并分析它们的源代码。要创建绑定,我需要setEnvironment(),但我不知道要放什么作为类路径。每组源代码都一样吗?我将使用什么作为给定项目的类路径字符串?
答案 0 :(得分:0)
好像你必须包含你使用的所有java文件的类路径 - 我的意思是jar和你自己的java文件。我不知道这是否是您的实际问题,因为您必须提供更多相关信息。但是如果你只想弄清楚方法的内容,我找到了一个例子here。
这里是我发布的链接的剪切示例:
String path ="C:\\Users\\pc\\workspace\\asttester\\src\\test\\Apple.java";
File file = new File(path);
String str = Util.readFileToString(file);
ASTParser parser = ASTParser.newParser(AST.JLS8);
parser.setResolveBindings(true);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setBindingsRecovery(true);
Map options = JavaCore.getOptions();
parser.setCompilerOptions(options);
String unitName = "Apple.java";
parser.setUnitName(unitName);
String[] sources = { "C:\\Users\\pc\\workspace\\asttester\\src" };
String[] classpath = {"C:\\Program Files\\Java\\jre1.8.0_25\\lib\\rt.jar"};
// sources is the source dir of all your java files
// classpath is the java jar containing all the needed classes
parser.setEnvironment(classpath, sources, new String[] { "UTF-8"}, true);
parser.setSource(str.toCharArray());
CompilationUnit cu = (CompilationUnit) parser.createAST(null);
从上面的例子中可以看出,方法定义是:
public void setEnvironment(String[] classpathEntries,
String[] sourcepathEntries,
String[] encodings,
boolean includeRunningVMBootclasspath)
所以,就像我说的那样,你需要在编译时添加所需的所有java jar。否则它不会将java类编译为.class文件。因此,您必须验证您正在使用的所有JAVA代码都包含在要添加到类路径的其中一个jar中。就像你现在一样,默认情况下,当你创建一个JAVA项目时,eclipse总是将所有JAVA jar添加到类路径中。
要确定JAVA文件的位置,您可以查看我找到的代码:
Class klass = String.class;
URL location = klass.getResource('/'+klass.getName().replace('.', '/')+".class");
您可以获得有关最后一个here的更多信息。