1

尝试在 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)

和以下梯度错误:

: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:错误:类 Builder 中的方法 addModifiers 无法应用于给定类型;.addModifiers(Modifier.PUBLIC, Modifier.FINAL) ^ required: Modifier[] found: int,int reason: varargs mismatch; int 无法转换为修饰符 C:\AAAMachine\Machine-master\Machine-android\src\main\java\com\bmp\ActivityWatcher.java:73: error: cannot access 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) ^ 需要:Modifier[] found: int,int reason: varargs mismatch; int 无法转换为修饰符 C:\AAAMachine\Machine-master\Machine-android\src\main\java\com\bmp\ActivityWatcher.java:179:错误:类 Builder 中的方法 addModifiers 不能应用于给定类型;.addModifiers(Modifier.PUBLIC, Modifier.FINAL) ^ required: Modifier[] found: int,int reason: varargs mismatch; int 无法转换为修饰符 C:\AAAMachine\Machine-master\Machine-android\src\main\java\com\bmp\ActivityWatcher.java:187: 错误:无法访问路径 javaFile.writeTo(System. 出去); ^ 找不到 java.nio.file.Path 的类文件 注意:C:\AAAMachine\Machine-master\Machine-android\src\main\java\com\bmp\internal\MachineInternals.java 使用或覆盖已弃用的 API。注意:使用 -Xlint:deprecation 重新编译以获取详细信息。注意:一些消息已被简化;使用 -Xdiags:verbose 重新编译以获得完整的输出 6 错误

失败的

FAILURE:构建失败并出现异常。

  • 出了什么问题:任务':Machine-android:compileDebugJava'执行失败。

    编译失败;有关详细信息,请参阅编译器错误输出。

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。

构建失败

总时间:6.881 秒

这是消息中的错误:

:machine-android:compileDebugJava

C:\AAAmachine\machine-master\machine-android\src\main\java\com\bmp\ActivityWatcher.java Error:(58, 15) error: cannot access Modifier class file for javax.lang.model.element.Modifier未找到错误:(65, 15) 错误:类 Builder 中的方法 addModifiers 不能应用于给定类型;必需:修饰符 [] 找到:int,int 原因:可变参数不匹配;int 无法转换为修饰符错误:(73、19)错误:无法访问 javax.annotation.processing.Filer 的 Filer 类文件未找到错误:(172、15)错误:类 Builder 中的方法 addModifiers 无法应用于给定类型; 必需:修饰符 [] 找到:int,int 原因:可变参数不匹配;int 无法转换为修饰符错误:(179, 15) 错误:类 Builder 中的方法 addModifiers 无法应用于给定类型;必需:修饰符 [] 找到:int,int 原因:可变参数不匹配;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”的执行失败。

编译失败;有关详细信息,请参阅编译器错误输出。信息:BUILD FAILED 信息:总时间: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) public final class ActivityWatcher {

    public static void installOnIcsPlus(Application application, RefWatcher refWatcher) {
        if (SDK_INT < ICE_CREAM_SANDWICH) {
          // If you need to support Android < ICS, override onDestroy() in your base activity.
          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();
    }
}

会不会和要写入的物理文件名有关?

4

3 回答 3

3

将您的导入更改为import javax.lang.model.element.Modifier. 如果您无法导入此包,请将项目的模块配置从 Android SDK 更改为 Java SDK。

于 2016-01-23T02:06:16.810 回答
0

我发现这种方法可行

这只是 Android Studio 错误。Android Studio 代码检查错误。将此代码添加到您的模块或应用程序模块中的 build.gradle 中,该错误将消失!

implementation 'org.checkerframework:checker:2.1.10'

添加这个,处理器模块将工作

整个 build.grade 是这样的:

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'

这是我的 android 工作室节目的捕获

请记住仅将其添加到您的 build.grale (应用程序或模块都为您工作)此错误只是代码检查错误,只是 android studio 应用程序检查错误

   implementation 'org.checkerframework:checker:2.1.10'
    provided project(':processAnnotation')
    annotationProcessor project(":processAnnotation")

processAnnotation 是我的流程模块。

于 2019-11-26T09:01:24.473 回答
0

在您的 Android 项目中,为代码使用 JavaPoet 创建单个 Java 模块。
成功选择java库

在这个模块中,你的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'
}

java库中的build.gradle.

于 2016-11-23T07:39:19.680 回答