1

私はこれを2時間試しましたが、うまくいかないようです。別のプロジェクトで、アプリケーションのフレームワークを構築したいと思います。まず、他のプロジェクトのクラスに到達しようとしています。コードはコンパイルされますが、実行時に、フレームワークのクラスからオブジェクトをインスタンス化する行で失敗します。

05-24 18:04:01.645: E/dalvikvm(16927): Could not find class 'frame.test.Hello', referenced from method moduleLogin.activity.Login.loginClick
05-24 18:04:01.645: W/dalvikvm(16927): VFY: unable to resolve new-instance 190 (Lframe/test/Hello;) in LmoduleLogin/activity/Login;
05-24 18:04:02.715: W/dalvikvm(16927): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at android.view.View$1.onClick(View.java:2154)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at android.view.View.performClick(View.java:2538)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at android.view.View$PerformClick.run(View.java:9152)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at android.os.Handler.handleCallback(Handler.java:587)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at android.os.Looper.loop(Looper.java:130)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at android.app.ActivityThread.main(ActivityThread.java:3691)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at java.lang.reflect.Method.invokeNative(Native Method)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at java.lang.reflect.Method.invoke(Method.java:507)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at dalvik.system.NativeStart.main(Native Method)
05-24 18:04:02.720: E/AndroidRuntime(16927): Caused by: java.lang.reflect.InvocationTargetException
05-24 18:04:02.720: E/AndroidRuntime(16927):    at java.lang.reflect.Method.invokeNative(Native Method)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at java.lang.reflect.Method.invoke(Method.java:507)
05-24 18:04:02.720: E/AndroidRuntime(16927):    at android.view.View$1.onClick(View.java:2149)
05-24 18:04:02.720: E/AndroidRuntime(16927):    ... 11 more
05-24 18:04:02.720: E/AndroidRuntime(16927): Caused by: java.lang.NoClassDefFoundError: frame.test.Hello
05-24 18:04:02.720: E/AndroidRuntime(16927):    at moduleLogin.activity.Login.loginClick(Login.java:49)
05-24 18:04:02.720: E/AndroidRuntime(16927):    ... 14 more

このトピックについてはたくさんあることは知っていますが、この問題を解決する投稿がないまま何時間も検索しました。ほとんどのトピックは、別のプロジェクトを参照する方法です。しかし、私のコードはコンパイルされているので、参照する必要がありますか?

そして、両方のプロジェクトはAndroidプロジェクトである必要がありますか?フレームワークプロジェクトはライブラリである必要がありますか?助けてくれてありがとう!

4

2 に答える 2

2

ライブラリプロジェクトがAndroidプロジェクトの場合は、プロジェクトプロパティから選択してライブラリプロジェクトにし、同じ場所でそれを使用するプロジェクトで参照する必要があります。ライブラリプロジェクトを使用するときは、いくつかのルールがあることを忘れないでください。詳細については、こちらの私の投稿を参照してください。

ライブラリプロジェクトがjavaの場合、他のjavaプロジェクトを使用するのとまったく同じです。

于 2012-05-24T16:32:26.867 に答える
2

これはロングショットですが、私にとってはうまくいきました(あなたがしたのと同じ投稿をすべて読んだ後、これにも何時間費やしました...)

プロジェクト参照を正しく構成したと確信している場合、これはサイレント ビルドの失敗の結果である可能性があります。

私の場合、2 つのプロジェクトのビルド環境間の非互換性が原因で問題が発生しました。純粋な Java であるプロジェクト "A" では、プロジェクト A のビルド環境で次の行がエラーなしでコンパイルされました。

if ((int) d.get("good")) == 0) {....

これは、オブジェクトのキャストが必要な (Android) プロジェクト "B" では合法ではないことが判明しました。

if ((Integer) d.get("good")) == 0) {....

ただし、エラーについて私が得た唯一の兆候は、あなたが経験したものと同じで、「VFY: 解決できません...」というエラーでした。

プロジェクト「A」からプロジェクト「B」にコードをコピーし、エラーを見つけて、プロジェクト「A」で修正するという痛ましい方法でエラーを見つけました。両方のプロジェクトの設定を微調整して正確に一致させるなど、そのような非互換性を見つけるには、おそらく私よりも賢明な方法があります。

于 2012-05-24T16:57:52.910 に答える