2013-08-30 51 views
0

這個問題就像一個邏輯謎題。你被警告了。NoClassDefFoundError只有一些設備,只能從playstore?這甚至有可能嗎?

我正在研究與其他應用程序集成的庫。一個人抱怨說,他們看到僅從他們的一些用戶的崩潰:

java.lang.NoClassDefFoundError: com.somecompany.subpackage.SomeAsyncTaskSubclass 
at com.somecompany.subpackage.ClassA.instantiateInstanceOfSomeAsyncTaskSubclass(ClassA.java:105) 
at 
com.somecompany.subpackage.Blah.loadsomedata(MyController.java:180) 
at com.somecompany.subpackage.Blah.loadsomemoredata(MyController.java:164) 
at com.somecompany.subpackage.SomeView.loadsomemoredata(SomeView.java:213) 
com.other.blah.Blah.preloadstuff(Blah.java:118) 
at 
com.other.blah.Controller.loadSomething(Controller.java:100) 
at 
com.other.blah.Controller.preloadSomething(Controller.java:144) 
at org.cocos2dx.lib.Cocos2dxRenderer.nativeRender(Native Method) 
at org.cocos2dx.lib.Cocos2dxRenderer.onDrawFrame(Cocos2dxRenderer.java:94) 
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1332) 
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1116) 

和代碼行崩潰的情況是在:

public class ClassA { 
    public void instantiateInstanceOfSomeAsyncTaskSubclass(){ 
     SomeAsyncTaskSubclass crashHere = new SomeAsyncTaskSubclass(); //<--- this is where it crashes 
    } 
} 

,並在同一個包,有...

class SomeAsyncTaskSubclass extends AsyncTask<String, Void, SomeCustomObject> { 
// some code here... 
} 

這是我一直在說或我知道:

  1. 這次崩潰只發生在一些用戶身上。 (但基於谷歌播放崩潰報告,所以這只是不準確?或者是生成的樣本太慢?)

  2. 開發人員不能在內部重現此錯誤,即使是簽署構建。 (我檢查的簽名版本,並dedexed它看到類在src存在,所以我相信他)

  3. 但是,當應用程序是在Play商店,人們下載了他的新版本,他突然看到一些人的崩潰報告,相信主要是設備2.3.x雖然這是未經證實)

  4. 他聲稱他更新爲「api 17」。當人們說,他們的意思是建立目標17?或者是否意味着更新到ADT 17?因爲我已經知道ADT弄糟了lib/libs文件夾問題。

  5. 他似乎在使用eclipse。

  6. 他呼籲從了cocos2d-X我的代碼爲Android,做一個handler.post()

這怎麼可能?

我很困惑,爲什麼只有一些用戶看到NoClassDefFoundError?這是一個巨大的谷歌播放崩潰報告問題?就像所有的用戶都看到它,但是然後谷歌播放說只有一些用戶看到這個問題? (我還沒有和開發人員進行過驗證,但是我相當確定他是通過從Play商店下載實時版本進行測試的,他沒有看到任何錯誤,而且這段代碼運行得很好)。

據我所知,NoClassDefFoundError只有當類通過三個類加載器之一存在時,但在運行時,沒有一個類加載器可以找到特定的類。

這是一個proguard問題?我讀過,proguard只在發佈時運行。

這是一個AsyncTask問題?我已經讀過,AsyncTasks必須在UI線程上第一次實例化。雖然,我不知道爲什麼會導致NoClassDefFoundError

有什麼想法?

+0

你有沒有得到這個解決?同樣的事情發生在我身上,其中一些設備沒有問題,有一些我得到了NoClassDefFoundError。謝謝。 –

+0

是的。看到我的答案,看看是否有幫助 –

回答

0

根據SDK ICS或以上構建您的項目。

他們已經自動加載了ICS +中的AsyncTask。這是問題。

+0

謝謝,但沒有幫助。 –

+0

哦,你是不是針對ICS +構建的,它仍然沒有解決問題?更重要的是,你是否一直看到這個問題? –

+0

所以這很奇怪。我卸載了應用程序並重新安裝了,但沒有奏效。我刪除了應用程序,重新啓動了設備,再次安裝了應用程序,現在它工作正常。這是一個聯繫7.感謝您的幫助。 –

0

啓用multidex引起了我的這個問題。我需要multidex,因爲我包含了整個Google Play服務庫。通過只包含我需要的組件(在我的情況下是GCM),我可以禁用multidex並防止這個問題。

我不知道該如何解決,但我認爲如果可能的話,我應該避免使用multidex。

相關問題