6

私のAndroidプロジェクトでは、ライブラリjarをlibsフォルダに追加しました。
このjarには、次の3つの異なるパッケージが含まれています。

  1. グーグルGSON(com.google.gson)
  2. jboss netty(org.jboss.netty)
  3. 私が自分で開発したクライアントアプリケーションで、これら2つの他のライブラリを使用します。(com.example.core)

jarはantを使用してコンパイル/アーカイブされます。

Eclipseにエラーはありませんが、Androidアプリをデバイスで実行しようとすると、次のようになります。

E/AndroidRuntime(23807): FATAL EXCEPTION: main
E/AndroidRuntime(23807): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.project/com.example.project.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.project.MainActivity" on path: /data/app/com.example.project-1.apk
E/AndroidRuntime(23807):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
E/AndroidRuntime(23807):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
E/AndroidRuntime(23807):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
E/AndroidRuntime(23807):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
E/AndroidRuntime(23807):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(23807):    at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(23807):    at android.app.ActivityThread.main(ActivityThread.java:5039)
E/AndroidRuntime(23807):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(23807):    at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(23807):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime(23807):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime(23807):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(23807): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.project.MainActivity" on path: /data/app/com.example.project-1.apk
E/AndroidRuntime(23807):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
E/AndroidRuntime(23807):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
E/AndroidRuntime(23807):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
E/AndroidRuntime(23807):    at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
E/AndroidRuntime(23807):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
E/AndroidRuntime(23807):    ... 11 more

そして、これを引き起こしているのは間違いなく私のjarです。これは、MainActivity内からそのクラスへの参照を削除すると、問題が解決され、アプリがデバイス上で実行されるためです。

apktoolを使用して、apkに何が入るかを確認したところsmali、パッケージ(com.example.core)を除いて、すべてがディレクトリに追加されていることがわかりました。
したがって、私のjarからのすべてのAndroidアプリクラス(com.example.project)、gson(com.google.gson)、およびnetty(org.jboss.netty)は存在しますが、com.example.coreは存在しません。

私の環境:
Eclipse 4.2.1
ADT 21.0.1
Java 7(oracle)

私がテストしたデバイス:
Samsung Galaxy S2
LG Nexus 4

何か案は?ありがとう。

4

4 に答える 4

10

NoClassDefFoundError実行時にjarファイルが利用できないために取得しています。

実行時に使用できるようにするには、次のようにJavaビルドパスのjarファイルのチェックボックスをオンにする必要があります。

ここに画像の説明を入力してください

于 2013-01-31T12:17:05.847 に答える
7

さて、ようやく問題を見つけることができました。しばらく時間がかかりました。

私は自分のマシンでjava7を使用しており、ant Builderもこのデフォルトバージョンを使用していますが、残念ながらandroidはjava 7が好きではないため、これで問題が修正されました。

<javac srcdir="." destdir="bin/classes" source="1.6" target="1.6">
    ...
</java>

または、Eclipseで次の手順を使用できます。

Eclipse menu: Window/Preferences/Java/Compiler
Compiler Compliance level: 1.6 
tick "use default" 

これにより、この問題に直面している他の人の時間を節約できることを願っています。

于 2013-02-03T10:41:44.113 に答える
3

(javaビルドパス/注文とエクスポート)ライブラリを一番上に移動してチェックインします

于 2013-01-31T12:15:12.637 に答える
1

IntelliJの場合、この設定により、最終的にエラーが解消されました。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

于 2014-04-24T09:24:19.827 に答える