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

时间:2017-08-15 15:08:59

标签: java android realm annotation-processing

我正在尝试创建一个在realm.io之上工作的注释处理器 遗憾地,使用领域你需要一个android项目,而创建一个注释处理器你需要一个java(为了导入javax.annotation.processing。*)

任何人都知道在Android库中导入AbstractProcessor和所有其他所需内容的方法吗?我找不到这样做的方法(已经将targetCompatibility和sourceCompatibility切换为1.7)

1 个答案:

答案 0 :(得分:0)

  

一种在Android库中导入AbstractProcessor和所有其他所需内容的方法

更好的问题是:你为什么要这样做?

如果您觉得您的处理器依赖于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库使用,那么最简单的方法就是将该代码复制到处理器中。