Android注解处理器访问资源(资产)
Android Annotation processor access resources (assets)
我想在我的注释处理器中访问我的 andoid studio 项目的资源。
我第一次尝试使用 filer 的 getResource 方法:
FileObject fo = processingEnv.getFiler().getResource(StandardLocation.SOURCE_PATH, "", "src/main/res/layout/activity_main.xml");
,但它总是抛出一个异常,只是将 "src/main/res/layout/activity_main.xml" 作为消息返回。
下一个我试过的是
this.getClass().getResource("src/main/res/layout/activity_main.xml")
,但这总是返回 null。
我最后想用的是这个:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fm = compiler.getStandardFileManager(null, null, null);
Iterable<? extends File> locations = fm.getLocation(StandardLocation.SOURCE_PATH);
for (File file : locations) {
System.out.print(file.getAbsolutePath());
}
,但抛出空指针异常
我使用以下方法从我的注释处理器中获取布局文件夹:
private File findLayouts() throws Exception {
Filer filer = processingEnv.getFiler();
JavaFileObject dummySourceFile = filer.createSourceFile("dummy" + System.currentTimeMillis());
String dummySourceFilePath = dummySourceFile.toUri().toString();
if (dummySourceFilePath.startsWith("file:")) {
if (!dummySourceFilePath.startsWith("file://")) {
dummySourceFilePath = "file://" + dummySourceFilePath.substring("file:".length());
}
} else {
dummySourceFilePath = "file://" + dummySourceFilePath;
}
URI cleanURI = new URI(dummySourceFilePath);
File dummyFile = new File(cleanURI);
File projectRoot = dummyFile.getParentFile().getParentFile().getParentFile().getParentFile().getParentFile().getParentFile();
return new File(projectRoot.getAbsolutePath() + "/src/main/res/layout");
}
处理器实例在项目的根级别运行,因此您可以像这样以简单的方式进行操作:
String fileSeparator = System.getProperty("file.separator");
String absoluteFilePth = "app" + fileSeparator + "src" + fileSeparator + "main" + fileSeparator + "res" + fileSeparator + "layout";
File file = new File(absoluteFilePth);
此致,
我想在我的注释处理器中访问我的 andoid studio 项目的资源。
我第一次尝试使用 filer 的 getResource 方法:
FileObject fo = processingEnv.getFiler().getResource(StandardLocation.SOURCE_PATH, "", "src/main/res/layout/activity_main.xml");
,但它总是抛出一个异常,只是将 "src/main/res/layout/activity_main.xml" 作为消息返回。
下一个我试过的是
this.getClass().getResource("src/main/res/layout/activity_main.xml")
,但这总是返回 null。
我最后想用的是这个:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fm = compiler.getStandardFileManager(null, null, null);
Iterable<? extends File> locations = fm.getLocation(StandardLocation.SOURCE_PATH);
for (File file : locations) {
System.out.print(file.getAbsolutePath());
}
,但抛出空指针异常
我使用以下方法从我的注释处理器中获取布局文件夹:
private File findLayouts() throws Exception {
Filer filer = processingEnv.getFiler();
JavaFileObject dummySourceFile = filer.createSourceFile("dummy" + System.currentTimeMillis());
String dummySourceFilePath = dummySourceFile.toUri().toString();
if (dummySourceFilePath.startsWith("file:")) {
if (!dummySourceFilePath.startsWith("file://")) {
dummySourceFilePath = "file://" + dummySourceFilePath.substring("file:".length());
}
} else {
dummySourceFilePath = "file://" + dummySourceFilePath;
}
URI cleanURI = new URI(dummySourceFilePath);
File dummyFile = new File(cleanURI);
File projectRoot = dummyFile.getParentFile().getParentFile().getParentFile().getParentFile().getParentFile().getParentFile();
return new File(projectRoot.getAbsolutePath() + "/src/main/res/layout");
}
处理器实例在项目的根级别运行,因此您可以像这样以简单的方式进行操作:
String fileSeparator = System.getProperty("file.separator");
String absoluteFilePth = "app" + fileSeparator + "src" + fileSeparator + "main" + fileSeparator + "res" + fileSeparator + "layout";
File file = new File(absoluteFilePth);
此致,