带 android 库的注解处理器(领域)

Annotation processor with android library (realm)

我正在尝试创建一个在 realm.io 之上运行的注释处理器 遗憾的是,要使用领域,您需要一个 android 项目,而要创建一个注释处理器,您需要一个 java 项目(以便导入 javax.annotation.processing.*)

有人知道在 android 库中导入 AbstractProcessor 和所有其他需要的东西的方法吗?我找不到执行此操作的方法(已经将 targetCompatibility 和 sourceCompatibility 切换为 1.7)

a way to import AbstractProcessor and all the other needed stuff on an android library

更好的问题是:你为什么想要那个?

如果您认为您的处理器将依赖于 Realm 类(或任何其他 Android 类),那么事实并非如此。当您编写使用 APT Mirror API 的代码时,您不必直接引用那些 类,只需通过名称即可。生成的代码将看起来 like this:

DeclaredType theBinder = lookup("android.os.Binder");
DeclaredType theIInterface = lookup("android.os.IInterface");
DeclaredType theCreator = lookup("android.os.Parcelable.Creator");
...
private DeclaredType lookup(CharSequence name) {
    return types.getDeclaredType(elements.getTypeElement(name));
}

然后您将继续使用 TypesElements 实用程序 类 的方法来操作创建的 TypeMirrors。您还可以将这些镜像转换为其他格式,例如 Square 的 JavaPoet TypeName,但实际上您不必这样做,因为 Mirror API 提供了您可能需要的大部分功能。

您绝对不想在注释处理器中加载 Realm 的 类。首先,根本不需要那个。但更重要的是,正如您在问题中指出的那样,通常不可能在注释处理器和它的运行时设备之间共享相同的设置。此问题并非 Android 所独有 — 例如,没有人希望设置成熟的应​​用程序服务器来编译使用 JAXB 感知注释处理器的服务器程序。

如果您真的想要在您的处理器中使用来自 Realm 的一些代码,并且它不能作为单独的 Java 库使用,最简单的方法就是复制该代码到您的处理器。