我正在为 Android 项目编写注释处理器,并且遇到了一种情况。我想处理库模块中的带注释的类,即应用程序模块依赖于库模块,并且需要处理库模块中的带注释的类。
但是,注释处理器无法“查看”依赖项中的注释,可能是因为代码已编译。请参阅here关于另一个图书馆的问题。我的项目问题的演示位于分支 here 。来自 sample
模块的注释被处理,但来自 lib
模块的注释未被处理。
这一切都很好,我已经接受了没有这个功能的生活,但事实证明 Android 数据绑定(bind)库可以处理来自模块甚至第三方库的注释。 This例如,库提供了由应用程序很好处理的 @BindingAdapter
方法。
我尝试在我使用的注释上设置保留类型,但没有成功。我能看到的唯一显着区别是数据绑定(bind)处理器以方法为目标,而我的方法以类(类型)为目标,但我认为这不会与处理器产生差异。所以我认为这可能与数据绑定(bind)处理器是 Android 插件的一部分有关,但我不确定这在这里有什么帮助。
有人知道这是怎么做到的吗?
最佳答案
Android 数据绑定(bind)也无法处理依赖项上的注释。相反,它在库的编译时处理库,并将信息保存到中间文件作为其存档的一部分(例如 jar 文件)。然后,它从依赖项加载中间文件信息,而不是读取注释。
如果将中间信息保存为 jar 文件依赖项的资源,则可以非常轻松地从 jar 文件中提取它。如果我没记错的话,它应该在您的类路径中,并且您可以使用 ClassLoader 的 getResource() 方法。我对此的内存可能有点陈旧,因为它不再使用 jar 文件来存储中间文件信息。
关于java - 注解处理第三方库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42210185/