我想我遇到了一些困难......让我知道你的想法。
我一直在开发一个使用Annotations的Android基础设施项目,我用它来定义一些东西。
看一下下面的注释,它应该可以编译,但是当我在设备上运行它时,我得到一个 NoClassDefFoundException。
@Target({FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewIdentifier {
int viewId() default -1;
int[] viewIds() default {};
ViewUI_Action[] listeners() default {};
boolean forDev() default false;
}
这是实现:
@SuppressWarnings("unused")
@ViewIdentifier(
listeners = ViewUI_Action.OnClickAsCollection,
viewIds = {R.id.AccelerometerEngineeringScreen, R.id.RotationVectorEngineeringScreen, R.id.NetworkEngineeringScreen,
R.id.MagneticEngineeringScreen, R.id.OrientationEngineeringScreen, R.id.GPS_EngineeringScreen, R.id.CallsEngineeringScreen,
R.id.UpgradeAppButton, R.id.DEV_Action_Button, R.id.FYI_Button})
private View[] modelViews;
如果我删除ViewIdentifier注释,代码编译并运行良好,应用程序启动,但如果我返回注释,NoClassDefFoundError 仍然存在。
这不是一个干净的构建问题,在发布之前我一直非常小心,另外,丢失的类文件在 bin/classes 中,当我删除注释时,无论干净构建如何,它都可以工作。我尝试刷新工作区以重建它、关闭打开项目、重新启动 Eclipse 和其他技巧。
最奇怪的是,如果我反转注释的参数,例如。
@SuppressWarnings("unused")
@ViewIdentifier(
viewIds = {R.id.AccelerometerEngineeringScreen, R.id.RotationVectorEngineeringScreen, R.id.NetworkEngineeringScreen,
R.id.MagneticEngineeringScreen, R.id.OrientationEngineeringScreen, R.id.GPS_EngineeringScreen, R.id.CallsEngineeringScreen,
R.id.UpgradeAppButton, R.id.DEV_Action_Button, R.id.FYI_Button},
listeners = ViewUI_Action.OnClickAsCollection)
private View[] modelViews;
我收到一个 Eclipse 错误说:
并且 Eclipse 无法找到包含该字段的类。
所以你怎么看?编译类出错?
亚当。