2011-12-12 102 views
3

我對一些Android項目和Eclipse有一個相當奇怪的問題。我有許多Android項目都使用相同的代碼,因此已將大量代碼移入Android庫項目中。長久以來,這對三個應用程序來說工作得非常好。今天,我也想用第四個應用程序庫,並遇到麻煩。基本上,情況如下:Eclipse中的java.lang.NoClassDefFoundError,但與Ant不兼容

  • 庫項目:包含一系列的活動,以及一些實用工具類
  • 新項目:實例在某種情況下庫項目的活動之一。

這應該都是微不足道的東西,我甚至在完全相同的庫項目中完成同樣的活動,在三個其他應用程序中完成同樣的事情。在新項目中,我引用了項目屬性中的庫項目,並將庫項目中的活動添加到AndroidManifest.xml中。 Eclipse現在認識到這一點,並讓我參考活動。一切都很好。

應用程序運行正常,直到我執行從庫項目啓動活動的操作。該應用程序退出,logcat告訴我這一點:

FATAL EXCEPTION: main 
java.lang.NoClassDefFoundError: no.company.application.base.SomeDetailActivity 
    at no.company.someotherapplication.SomeListActivity$4.onClick(SomeListActivity.java:466) 
    at android.view.View.performClick(View.java:2538) 
    at android.view.View$PerformClick.run(View.java:9152) 
    at android.os.Handler.handleCallback(Handler.java:587) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:3691) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
    at dalvik.system.NativeStart.main(Native Method) 

這就是樂趣開始的地方。我知道庫項目是與.apk捆綁在一起的,因爲我有一些運行該項目的實用程序代碼。但是當從Ant中編譯這個精確的項目時,通過使用命令ant debug然後ant installd,應用程序運行良好,包括啓動活動。所以,完全相同的項目設置在Ant中運行良好,但與Eclipse無關。

我試過了通過Google搜索找到的技巧,比如清理所有項目,刪除特定項目的.project和.classpath並重新生成它們。我還通過將它與工作項目中的清單文件進行比較,確保我的清單文件是正確的。無論我做什麼,我都會再次遇到這個問題。由於它使用Ant編譯和運行得很好,在我看來,項目本身沒有任何問題,但我真的需要能夠通過Eclipse編譯它。

編輯:我只是用dexdump工具反編譯Eclipse創建的apk中的classes.dex,並且能夠確認該類是與apk捆綁在一起的。我找到了一個具有正確的類描述符和實例字段的類。另一方面,我也反編譯Ant生成的版本,並得到了一些不同。太多的重複在這裏。使用Ant和Eclipse時生成的文件應該是相同的嗎?

回答

0

有時android插件不會很好地生成資源,從而導致此類問題。嘗試遵循以下簡單步驟:

  1. 更改某個佈局xml中的某個id並保存xml(項目中的任何佈局將執行此操作)。
  2. 項目編譯後通過插件將id更改回並保存。

如果這是問題,那麼它應該在項目編譯後解決。

+0

我在庫項目中更改了一個標識,並且在使用庫項目的項目中更改了一個標識,但仍然沒有運氣。應用程序在完全相同的行上崩潰,具有完全相同的消息。 – Bendik

0

我解決了將jar包括在最終項目的構建路徑中。庫的構建路徑顯然是不夠的。

它很爛,但起碼它起作用。

2

我剛碰到同樣的問題。在我的情況下,我已經正確設置了Java構建路徑,但忘記添加庫。轉到屬性 - > Android,然後在庫部分中單擊「添加...」,然後添加庫項目。之後,它按預期運行。

+0

由於同樣的問題,我見過'java.lang.VerifyError'。庫類被用在'catch'子句中,所以與庫相關的問題早於(比方法調用的情況下)被檢測到,並且表現爲不同的異常。 – 18446744073709551615

相關問題