2016-05-14 2 views
1

私のアノテーションプロセッサ内のandroidスタジオプロジェクトからリソースにアクセスしたいとします。Androidアノテーションプロセッサのアクセスリソース(アセット)

私は最初のファイラーからのgetResourceメソッドを使用してみました:

FileObject fo = processingEnv.getFiler().getResource(StandardLocation.SOURCE_PATH, "", "src/main/res/layout/activity_main.xml"); 

が、それは常にちょうどメッセージとして "SRC /メイン/ resを/レイアウト/ activity_main.xml" を返された例外をthrowed。

次は私が試してみました

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()); 
      } 

、それは私が私の注釈プロセッサからレイアウトフォルダを取得するには、次を使用し、nullポインタ例外

+0

従来のJava(Androidに加えて)で動作するツールでは、「リソース」という用語は、AndroidリソースではなくJava/JARリソースを指しています。 – CommonsWare

+0

私は解決策を見つけた – H3x0n

答えて

5

をthrowes:

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"); 
    } 
関連する問題