繁体   English   中英

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

[英]Annotation processor with android library (realm)

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

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

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

更好的问题是:为什么要那样?

如果您认为您的处理器将依赖于Realm类(或任何其他Android类),则情况并非如此。 在编写使用APT Mirror API的代码时,不必直接通过名称引用这些类。 产生的代码如下所示

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实用程序类的方法来操纵创建的TypeMirror。 您还可以将这些镜像转换为其他格式,例如Square的JavaPoet TypeName,但实际上不必这样做,因为Mirror API提供了您可能需要的大多数功能。

您绝对不希望在注释处理器中加载Realm的类。 首先,根本没有必要。 但更重要的是,正如您在问题中所指出的那样,注释处理器与其运行时设备之间通常无法共享相同的设置。 这个问题不是Android独有的,例如,没有人期望设置成熟的应​​用程序服务器来编译使用支持JAXB的注释处理器的服务器程序。

如果您确实希望在处理器中使用Realm的某些代码,并且不能作为单独的Java库使用,则最简单的方法是将代码复制到处理器中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM