2013-01-31 20 views
6

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

その他これら二つを使用しています
  1. グーグルGSON(com.google.gson)
  2. のJBossネッティー(org.jboss.netty)私は自分自身を開発し
  3. クライアントアプリケーションlibs。 (com.example.core)

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

は日食では、エラーはありませんが、私は、デバイス上で私の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のアンドロイド・アプリケーション・クラス(com.example.project)、gson(com.google.gson)、およびnetty(org.jboss.netty)はすべてcom.example.coreにはありません。

私の環境:
のEclipse 4.2.1
ADT 21.0.1
私がテストしたJava 7(オラクル)

デバイス:
サムスンギャラクシーS2
LGネクサス4

何か案は?おかげさまで

答えて

7

[OK]を、私は最終的に見つけることができました問題は、それは私がしばらくかかった。

私は私のマシン上でJava 7を使用していますが、アリビルダーが同様にこのデフォルトのバージョンを使用して、残念ながらしかし、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" 

この問題に直面している他の人には、時間を節約できることを願っています。IntelliJのために

3

(Javaのビルド・パス/順序およびエクスポート)あなたのjarファイルは、実行時に使用できないため、あなたはNoClassDefFoundErrorを取得している上に、あなたのlibが移動し、

+0

私は、注文とエクスポート]タブでのみsrcとGENフォルダを瓶を持っていませんAndroidの依存関係とAndroid 4.2。 –

+0

(javaビルドパス/ライブラリ)jarを追加し、libsフォルダからgson jarファイルを追加してください。 – Anand

+0

私が読んだことは、新しいバージョンのADTではそれをする必要はありません。それ。必要なライブラリをプロジェクトの 'libs'ディレクトリに追加すれば十分です。 –

10

でご確認ください。あなたはこのようなあなたのJavaのビルド・パスにあなたのjarファイルのチェックボックスをチェックする必要があります、それは実行時に利用できるようにするためには

enter image description here

+0

'Order and Export'タブにjarファイルがなく、srcフォルダとgenフォルダとAndroid依存ファイルとAndroid 4.2のみがあります。しかし私が私の質問に書いたように、私の瓶の内容はAPKに追加されていますが、すべてではありません。したがって、実行時に私のjarファイルが利用できないのは真実ではありません。 –

1

このセットアップは、最終的にエラーが私のために離れて行かせた。

enter image description here

enter image description here

関連する問題