我一直在成功使用 ButterKnife 在我的应用程序中注入视图,如下所示:
@InjectView(android.R.id.text1)
TextView mMessageText;
@InjectView(android.R.id.button1)
ImageView mButton;
... then later...
View.inflate(ctx, R.layout.layout_message_with_button, this);
ButterKnife.inject(this);
mMessageText.setText("Some Text");
今天早上我集成了 MonkeyTalk 进行一些测试,现在我的注射似乎被破坏了。我已经删除/重新添加了 ButterKnife 的注释处理,但这似乎并没有解决问题。使用 findViewById 解决了问题(找到了视图),但此时将项目更改为直接使用 findViewById 并不是一个真正的选择。
我无法找到有关库之间冲突的任何信息(或通常将 AspectJ 与 ButterKnife 一起使用),因此希望这里的某人可以帮助提供一些关于我可能做错了什么的见解(或者如果它们通常不兼容) .
我正在使用 ButterKnife 4.0.1 和 MonkeyTalk Agent 2.0.9
更新: 我也尝试在 Eclipse 项目属性中更改库的构建顺序,但这似乎也无济于事。
更新: 我将其缩小到不是在 ButterKnife 中创建的生成文件。它似乎与 org.eclipse.ajdt.core.ajbuilder 中未发生的注释处理有关。当我按照此处的建议将 org.eclipse.jdt.core.javabuilder 添加到 .project 时:https://bugs.eclipse.org/bugs/show_bug.cgi?id=169857生成了类,但我得到了.ajc 文件在运行时出现 NoClassDefFoundError。知道如何让注释处理器在 ajbuilder 中运行吗?这似乎是我的问题的正确解决方案。
更新: 从这篇文章(http://andrewclement.blogspot.ca/2014/08/annotation-processing-in-ajdt.html)看来,可以使用 Eclipse 4.4 在同一个项目中处理 Aspects 和 Annotations。然而,似乎 ADT 23 + Eclipse 4.4 + AspectJ 的组合非常不稳定(而且似乎无论如何都不会从 ButterKnife 的注释中生成代码)。任何人都知道Android Studio在这里是否有帮助?
更新: 我将我的项目转换为 Android Studio,看起来 Aspects 和 Annotations 都在工作。我知道我仍然没有对 Aspects 做正确的事情,因为直到我将 Jake Wharton 的Hugo库添加到 Android 项目中,它们才开始处理。