【问题标题】:Annotation processor with android library (realm)带有android库的注释处理器(领域)
【发布时间】:2017-08-15 15:08:59
【问题描述】:

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

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

【问题讨论】:

    标签: java android realm annotation-processing


    【解决方案1】:

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

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

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

    【讨论】:

    • 终于成功了,非常感谢!完美的解释!
    猜你喜欢
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2018-06-29
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多