私は何か荒いヒットしたと思う...私はあなたの考えを知らせてください。AnnapationのためにNoClassDefFoundErrorという奇妙なJavaの問題が発生しましたか?
私は物事のカップルを定義するために使用注釈を、使用していますアンドロイド、しばらく今インフラプロジェクトのために開発されてきました。
次のアノテーションを見て、コンパイルする必要がありますが、デバイスで実行すると、NoClassDefFoundExceptionが発生します。
@Target({FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewIdentifier {
int viewId() default -1;
int[] viewIds() default {};
ViewUI_Action[] listeners() default {};
boolean forDev() default false;
}
これは実装です:私はViewIdentifier注釈を削除すると
@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;
、コードをコンパイルし、正常に動作、アプリが起動し、私は、注釈を返す場合、 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は、このフィールドを含むクラスを見つけることができません。
あなたはどう思いますか?クラスのコンパイル中にエラーが発生しましたか?
アダム。
サイズが1の配列の場合でも 'listeners'フィールドに配列初期化子の構文を付ける必要がありますか?私は注釈構文をどのように許しているのかわかりません。 –
うん...それを見てください。私は定数配列を使用しています...おそらくそうでしょうか?確かめます。 – TacB0sS
私はあなたがそれを持っていると思う... – TacB0sS