7

2 つのライブラリ プロジェクトを参照するプロジェクトがあります。ADT および SDK ツールをバージョン 17にアップグレードした後、アプリはライブラリ プロジェクトの 1 つで定義されたクラスへの参照にヒットするとすぐにクラッシュします。次のようなエラー:

Unable to resolve superclass of Lcom/my/package/name/MyActivity; (118)
Link of class 'Lcom/my/package/name/MyActivity;' failed
VFY: unable to find class referenced in signature (Lcom/my/package/name/MyActivity;)

と:

 FATAL EXCEPTION: main
  java.lang.VerifyError: my/package/name/util/SomeClass
    at my.package.name.App.onCreate(App.java:120)
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3925)
    at android.app.ActivityThread.access$1300(ActivityThread.java:122)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1184)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4340)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)

(私のパッケージとクラスはそのように命名されていません。ここに投稿するためにそれらを変更しただけです)

ここで何が起こっているかについてのアイデアはありますか? 私が知る限り、ビルド エラーはなく、私のプロジェクトはライブラリ プロジェクトを正しく参照しているように見えます。

4

3 に答える 3

12

私はまったく同じ問題を抱えていました。この投稿を見つける:ADT 17で「NoClassDefFoundError」を修正する方法は、私にフラストレーションを与えないようにします。

于 2012-03-22T10:28:41.247 に答える
4

うわー、それは怖かったですが、うまくいくまでたくさんのことを試しました. このすべてのどこかで、それは解決しました。私のライブラリ プロジェクトには、「lib」フォルダに追加され、ビルド パスに添付された少数の jar があります。

ライブラリと依存関係の変更に関するhttp://tools.android.com/recent/dealingwithdependenciesinandroidprojectsの変更ログ ノートを読みました。私はこれに気づきました:

プロジェクトには、ライブラリ プロジェクトと jar ファイルの依存関係だけでなく、ソース フォルダーもあります。project.properties の依存関係としてライブラリ プロジェクトを追加する以外に必要なセットアップはなく、プロジェクトのクラスパスには次の情報が自動的に入力されます。

The content of the project’s libs/*.jar
The output of the Library Projects.
The Library Projects’ libs/*.jar

何らかの理由で、ライブラリ プロジェクトのフォルダの名前が「libs」ではなく「lib」になっていました。私はそれを2年近く問題なく使用してきましたが、先に進んで「libs」に変更しました。次に、プロジェクトを更新し、「is Library」フラグをオフにしてから再度オンにして、変更が反映されていることを確認しました。

また、新しいツールでは、ライブラリを参照するプロジェクトにライブラリ プロジェクトの jar を含めることを処理すると述べています。この時点まで、ライブラリ プロジェクトの jar を参照元プロジェクトに手動で追加していました。そこで、参照プロジェクトに入り、ビルド パスから jar を削除しました。次に、プロジェクトのプロパティに入り、ライブラリ プロジェクトを削除して再度追加しました。

最後に、jar ファイルがライブラリ プロジェクトのフォルダーにあることに気付きましたが、使用されていませんでした。ちょうどフォルダにありました。そのファイルを削除しました。

そのため、どこかで再び機能し始めました。本当の修正は "lib" を "libs" に変更することだと思いますが、心に恐怖とパニックを経験している他の開発者を助けるために、すべてを言及したことを確認したかったのです. 幸運を!

于 2012-03-22T06:46:29.980 に答える
1

@kargi

原則として、ここここでの解決策は非常に悪い習慣だと思います。Mavenは、この途方もないlibフォルダービジネスをずっと前に解決しましたが、MavenはAndroidの構築もあまり効率的ではないため、ここで説明するように、Eclipseエクスポート機能を使用することをお勧めします。

于 2012-03-27T13:27:46.320 に答える