尝试在LeakCanary的Android ActivityWatcher类中实现基本JavaPoet示例(见下文):
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
Modifier.PUBLIC和Modifier.STATIC以及其他.addModifiers语句产生Android Studio错误
Builder中的addModifiers(javax.lang.model.element.modifier ...)无法应用于(int,int)
以及以下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:class Builder中的方法addModifiers不能应用于给定的类型; .addModifiers(Modifier.PUBLIC,Modifier.FINAL) ^ 必需:修饰符[] 发现:int,int 原因:varargs不匹配; int无法转换为Modifier C:\ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java:73:error:无法访问Filer javaFile.writeTo(System.out的); ^ 找不到javax.annotation.processing.Filer的类文件 C:\ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java:172:错误:类Builder中的方法addModifiers不能应用于给定的类型; .addModifiers(Modifier.PUBLIC,Modifier.STATIC) ^ 必需:修饰符[] 发现:int,int 原因:varargs不匹配; int无法转换为Modifier C:\ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java:179:错误:类Builder中的方法addModifiers不能应用于给定的类型; .addModifiers(Modifier.PUBLIC,Modifier.FINAL) ^ 必需:修饰符[] 发现:int,int 原因:varargs不匹配; 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重新编译:弃用以获取详细信息。 注意:某些消息已经简化;使用-Xdiags重新编译:详细以获得完整输出 6个错误
FAILED
失败:构建因异常而失败。
出了什么问题: 任务执行失败':Machine-android:compileDebugJava'。
编译失败;有关详细信息,请参阅编译器错误输出。
尝试: 使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。
建立失败
总时间:6.881秒
以及来自消息的错误:
:machine-android:compileDebugJava
C:\ AAAmachine \机器主\机器机器人\ SRC \主\的java \ COM \ BMP \ ActivityWatcher.java 错误:(58,15)错误:无法访问修饰符 找不到javax.lang.model.element.Modifier的类文件 错误:(65,15)错误:类Builder中的方法addModifiers无法应用于给定类型; 必需:修饰符[] 发现:int,int 原因:varargs不匹配; int无法转换为Modifier 错误:(73,19)错误:无法访问Filer 找不到javax.annotation.processing.Filer的类文件 错误:(172,15)错误:类Builder中的方法addModifiers无法应用于给定类型; 必需:修饰符[] 发现:int,int 原因:varargs不匹配; int无法转换为Modifier 错误:(179,15)错误:类Builder中的方法addModifiers无法应用于给定类型; 必需:修饰符[] 发现:int,int 原因:varargs不匹配; int无法转换为Modifier 错误:(187,19)错误:无法访问Path 找不到java.nio.file.Path的类文件 注意:C:\ AAAmachine \ machine-master \ machine-android \ src \ main \ java \ com \ bmp \ internal \ machineInternals.java使用或覆盖不推荐使用的API。 注意:使用-Xlint重新编译:弃用以获取详细信息。 注意:某些消息已经简化;使用-Xdiags重新编译:详细以获得完整输出 错误:任务执行失败':machine-android:compileDebugJava'。
编译失败;请参阅编译器错误输出以获取详细信 信息:建筑失败 信息:总时间:6.881秒 信息:7个错误 信息:0警告 信息:请参阅控制台中的完整输出
这里是源代码的要点,使用来自JavaPoet的readme.md文件的基本示例:
package com.bmp;
import 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.Modifier;
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)公共最终类ActivityWatcher {
public static void installOnIcsPlus(Application application,RefWatcher refWatcher){ if(SDK_INT< ICE_CREAM_SANDWICH){ //如果你需要支持Android< ICS,覆盖基础活动中的onDestroy()。 返回; } 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();
}
}
是否与要写入的物理文件名相关?
答案 0 :(得分:3)
将导入更改为import javax.lang.model.element.Modifier
。如果您无法导入此软件包,请将项目的模块配置从Android SDK更改为Java SDK。
答案 1 :(得分:0)
在Android项目中,为代码使用JavaPoet创建一个Java模块
suce为
在此模块中,您的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'
}
答案 2 :(得分:0)
这只是Android Studio错误。 Android Studio代码为此检查错误。 将此代码添加到您的模块或应用模块的build.gradle中,该错误将消失!
implementation 'org.checkerframework:checker:2.1.10'
添加这一行,处理器模块将工作
整个build.gralde像这样:
apply plugin: 'java-library'
repositories {
mavenCentral()
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.squareup:javapoet:1.11.1'
implementation 'com.google.auto.service:auto-service:1.0-rc6'
implementation 'org.checkerframework:checker:2.1.10'
api project(':baseAnnotation')
}
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
implementation 'org.checkerframework:checker:2.1.10'
请记住,仅将其添加到您的build.grale(应用程序或模块都对您有用) 此错误只是代码检查错误,只是android studio应用程序检查错误
implementation 'org.checkerframework:checker:2.1.10'
provided project(':processAnnotation')
annotationProcessor project(":processAnnotation")
processAnnotation是我的流程模块。