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();
}
}
書き込む物理ファイル名と関係あるのでしょうか?