2013-01-31 50 views
6

在我的android項目中,我在libs文件夾中添加了一個庫jar。
這個jar文件包含三個不同的軟件包:包含庫jar時出現ClassNotFoundException

  1. 谷歌GSON(com.google.gson)
  2. JBoss的網狀(org.jboss.netty)
  3. 我自己開發的客戶端應用程序,它使用這兩個其他庫。 (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 

而且這絕對是我罐子,是造成這一點,因爲如果我刪除,以引用它是MainActivity中的類,然後解決問題並在設備上運行應用程序。

使用apktool我查看了apk中的內容,發現所有內容都被添加到smali目錄,除了我的包(com.example.core)外,其他所有內容都被添加到了smali目錄中。
因此,我的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(甲骨文)

設備我測試的:
三星Galaxy S2
LG的Nexus 4

有任何想法嗎? 謝謝。

回答

7

好吧,我終於找到了問題,我花了一段時間。

我使用的Java 7我的機器和Ant構建使用此默認版本爲好,但不幸的是,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" 

希望,這將節省一些時間,其他人誰正在面臨這樣的問題。

3

(Java構建路徑/訂單和出口)移動在上面的lib和檢查

+0

我沒有在訂單和出口標籤罐子裏,只有src和根文件夾和Android的依賴和Android 4.2。 –

+0

(java構建路徑/庫)點擊添加jar,並添加你從libs文件夾中的gson jar文件 – Anand

+0

從我讀過的,在新版本的ADT中,你不需要這樣做,實際上你不應該這樣做那。它應該足以將所需的庫添加到項目的'libs'目錄中。 –

10

你得到一個NoClassDefFoundError,因爲你的jar文件是不是在運行時可用。

爲了它可在運行時,你必須檢查你的jar文件的複選框,在這樣的Java構建路徑:

enter image description here

+0

我在'Order and Export'選項卡中沒有jar,只有src和gen文件夾以及Android Dependencies和Android 4.2。但正如我在我的問題中寫的,我的jar的一些內容正在被添加到apk中,但不是全部。所以我的jar在運行時不可用是不正確的。 –

1

的IntelliJ此設置終於做出了錯誤走開我:

enter image description here

enter image description here

相關問題