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) に適用できません

および次のgradleエラー:

:Machine-android:compileDebugJava

C:\AAAMachine\Machine-master\Machine-android\src\main\java\com\bmp\ActivityWatcher.java:58: エラー: Modifier .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) ^ 必須: Modifier[] が見つかりました: 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) ^ 必須: Modifier[] が見つかりました: 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) ^ 必須: Modifier[] が見つかりました: int,int 理由: varargs の不一致。int を Modifier 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 エラー:(58, 15) エラー: javax.lang.model.element.Modifier の Modifier クラス ファイルにアクセスできません見つかりません エラー:(65, 15) エラー: クラス Builder のメソッド addModifiers は、指定された型に適用できません。必須: Modifier[] が見つかりました: int,int 理由: varargs の不一致。int を Modifier に変換できません エラー:(73, 19) エラー: javax.annotation.processing.Filer の Filer クラス ファイルにアクセスできません エラー:(172, 15) エラー: クラス Builder のメソッド addModifiers を特定の型に適用できません; 必須: Modifier[] が見つかりました: int,int 理由: varargs の不一致。int は修飾子エラーに変換できません:(179, 15) エラー: クラス Builder のメソッド addModifiers は、指定された型に適用できません。必須: Modifier[] が見つかりました: int,int 理由: varargs の不一致。int は修飾子エラーに変換できません:(187, 19) エラー: java.nio.file.Path の 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 プロジェクトで、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 に答える