何か大まかなことをしたと思います...あなたの考えを教えてください。
私はしばらくの間、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 が持続します。
これはクリーン ビルドの問題ではありません。これを投稿する前に非常に注意を払っていました。さらに、不足しているクラス ファイルがビン/クラスにあり、注釈を削除するとクリーン ビルドに関係なく機能します。ワークスペースを更新して再構築し、プロジェクトを閉じて開き、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 はこのフィールドを含むクラスを見つけることができません。
それで、あなたはどう思いますか?クラスのコンパイル中にエラーが発生しましたか?
アダム。