2016-01-22 18 views
1

試圖實現基本JavaPoet例如應用(見下文)在Android的ActivityWatcher類從LeakCanary:怎麼到Modifier.PUBLIC一個參考,不能在建設者MethodSpec的methodBuilder爲JavaPoet

.addModifiers(Modifier.PUBLIC, Modifier.STATIC) 

該Modifier.PUBLIC和Modifier.STATIC,另.addModifiers聲明產生了Android Studio錯誤

​​

及以下gradle這個錯誤:

:Machine-android:compileDebugJava 

C:\ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java:58:錯誤:無法訪問修改器 .addModifiers(Modifier.PUBLIC,Modifier.STATIC) ^ 未找到javax.lang.model.element.Modifier的類文件 C:\ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java:65:error:method類Builder中的addModifiers不能應用於給定的類型; .addModifiers(Modifier.PUBLIC,Modifier.FINAL) ^ 必需:修飾符[] found:int,int reason:varargs mismatch; int無法轉換爲Modifier C:\ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java:73:錯誤:無法訪問Filer javaFile.writeTo(System.out) ; ^ javax.annotation.processing.Filer的類文件未找到 C:\ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java:172:error:method addModifiers in類生成器不能應用於給定的類型; .addModifiers(Modifier.PUBLIC,Modifier.STATIC) ^ 必需:修飾符[] found:int,int reason:varargs mismatch; int無法轉換爲Modifier C:\ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java:179:錯誤:類Builder中的addModifiers方法無法應用於給定的類型; .addModifiers(Modifier.PUBLIC,Modifier.FINAL) ^ 必需:修飾符[] found:int,int reason:varargs mismatch; int無法轉換爲Modifier C:\ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java:187:錯誤:無法訪問路徑 javaFile.writeTo(System.out) ; ^ java.nio.file.Path的類文件未找到 注意:C:\ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ internal \ MachineInternals.java使用或覆蓋不贊成使用的API。 注意:使用-Xlint:deprecation重新編譯以獲取詳細信息。 注意:一些消息已被簡化;重新編譯-Xdiags:冗長得到充分的輸出 6錯誤

失敗

失敗:建立失敗,一個例外。

  • 出了什麼問題: 執行失敗的任務 ':機器的android:compileDebugJava'。

    Compilation failed; see the compiler error output for details.

  • 嘗試: 與--stacktrace選項獲取堆棧跟蹤運行。使用--info或--debug選項運行以獲取更多日誌輸出。

構建失敗

總時間:6.881秒

,這裏是從信息的錯誤:

:machine-android:compileDebugJava 

C:\ AAAmachine \機主\機器的Android \ SRC \ main \ java \ com \ bmp \ ActivityWatcher.java 錯誤:(58,15)錯誤:無法訪問修改器 未找到javax.lang.model.element.Modifier的類文件 錯誤:(65,15)錯誤:類Builder中的方法addModifiers無法應用於給定的類型; 必需:修飾符[] found:int,int reason:varargs mismatch; varargs mismatch; int無法轉換爲修飾符 錯誤:(73,19)錯誤:無法訪問Filer javax.annotation.processing.Filer的類文件未找到 錯誤:(172,15)錯誤:類Builder中的方法addModifiers無法應用給定類型; 必需:修飾符[] found:int,int reason:varargs mismatch; varargs mismatch; int無法轉換爲修飾符 錯誤:(179,15)錯誤:類Builder中的方法addModifiers無法應用於給定的類型; 必需:修飾符[] found:int,int reason:varargs mismatch; varargs mismatch; int無法轉換爲修飾符 錯誤:(187,19)錯誤:無法訪問路徑 java.nio.file.Path的類文件未找到 注意:C:\ AAAmachine \ machine-master \ machine-android \ src \ main \ java \ com \ bmp \ internal \ machineInternals.java使用或覆蓋棄用的API。 注意:使用-Xlint:deprecation重新編譯以獲取詳細信息。 注意:一些消息已被簡化;使用-Xdiags:verbose進行重新編譯以獲得完整的輸出 錯誤:執行任務':machine-android:compileDebugJava'失敗。

Compilation failed; see the compiler error output for details. Information:BUILD FAILED Information:Total time: 6.881 secs Information:7 errors Information:0 warnings Information:See complete output in console

這裏的源代碼的使用從JavaPoet的readme.md文件中的基本示例的要點:

package com.bmp; 

進口android.annotation.TargetApi; import android.app.Activity; import android.app.Application; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.util.Log; import android.view.ViewGroup;

import com.bmp.util.eventbus.FabricLogEvent; import com.squareup.javapoet.JavaFile; import com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.TypeSpec;

import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.lang.reflect。改性劑;

import de.greenrobot.event.EventBus;

import static android.os.Build.VERSION.SDK_INT; import static android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH; import static com.bmp.Preconditions.checkNotNull;

@TargetApi(ICE_CREAM_SANDWICH)公共final類ActivityWatcher {

公共靜態無效installOnIcsPlus(應用程序,RefWatcher refWatcher){ 如果(SDK_INT < ICE_CREAM_SANDWICH){// 如果需要支持Android ICS <,在您的基本活動中重寫onDestroy()。 return; } ActivityWatcher activityWatcher = new ActivityWatcher(application,refWatcher); activityWatcher.watchActivities();

MethodSpec main = MethodSpec.methodBuilder("main") 

      .addModifiers(Modifier.PUBLIC, Modifier.STATIC) 
      .returns(void.class) 
      .addParameter(String[].class, "args") 
      .addStatement("$T.out.println($S)", System.class, "Hello, JavaPoet!") 
      .build(); 

    TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld") 
      .addModifiers(Modifier.PUBLIC, Modifier.FINAL) 
      .addMethod(main) 
      .build(); 

    JavaFile javaFile = JavaFile.builder("com.bmp.helloworld", helloWorld) 
      .build(); 

    try { 
     javaFile.writeTo(System.out); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    FileWriter fileWriter = null; 
    try { 
     fileWriter = new FileWriter(new File("com.bmp.newclass.java")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

}

難道是相關的物理文件名來寫?

回答

3

將您的進口更改爲import javax.lang.model.element.Modifier。如果無法導入此包,請將項目的模塊配置從Android SDK更改爲Java SDK。

+0

有沒有辦法在Android Studio中將其作爲Android項目中的模塊進行編譯,或者是否存在可以使用的aar文件? –

0

在您的Android項目中,爲代碼使用JavaPoet創建一個Java模塊。
suce爲select the java library

在這個模塊中,你build.gradle文件應該是這樣的:

apply plugin: 'java' 

sourceCompatibility = "1.7" 
targetCompatibility = "1.7" 
dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.squareup:javapoet:1.7.0' 
} 

the build.gradle in the java library

+0

歡迎來到Stack Overflow!我編輯了你的答案。當你想顯示一個代碼片段時,最好將它顯示爲文本。然後用戶可以複製粘貼它。要將代碼放在'code markdown'中,請將其縮進4個空格。謝謝你的貢獻,我希望你的回答會有幫助! –

+1

你是對的,謝謝。我會在下次做。 – luguanquan

相關問題