App强制关闭java.lang.NoClassDefFoundError:android/os/AsyncTask

问题描述:

我们最近在我们的应用中引入了OAuth登录。这意味着使用WebView对用户进行身份验证,并使用AsyncTask进行必要的REST调用。App强制关闭java.lang.NoClassDefFoundError:android/os/AsyncTask

不幸的是,在介绍这种登录方法后,我们得到了应用程序部队关闭的报告。这似乎与那些在登录后执行其他AsyncTask S,但堆栈跟踪不可惜没有告诉我们很多:

java.lang.IllegalStateException: Could not execute method of the activity 
at android.view.View$1.onClick(View.java:3100) 
at android.view.View.performClick(View.java:3627) 
at android.view.View$PerformClick.run(View.java:14329) 
at android.os.Handler.handleCallback(Handler.java:605) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4511) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at android.view.View$1.onClick(View.java:3095) 
... 11 more 
Caused by: java.lang.NoClassDefFoundError: android/os/AsyncTask 
at com.foo.bar.TransmissionActivity.transmit(TransmissionActivity.java:44) 
... 14 more 

我们设法通过使用RoboAsyncTask(从RoboGuice)来解决上述错误,而不是来自Android SDK的AsyncTask,但我们还有其他使用WebView的活动。 WebView显然在其调用堆栈中的某处使用AsyncTask,并且类似于上面显示的错误(Caused by: java.lang.NoClassDefFoundError: android/os/AsyncTask)的错误已经开始显示在我们的错误日志中。

错误发生在不同的设备和不同的Android版本上,没有明显的模式。我们试图自己重现错误,没有任何运气。

任何想法?

+1

我在错误的时间和地点创建任务时遇到过类似的问题。你能用AsyncTask显示代码示例吗? – RagnarR

这可能是构建设置的问题。 (src/gen的构建顺序已知会导致一些问题,compat库的libs文件夹被称为lib,这在新的sdk版本中对我造成了一些问题)。

看看是否创建一个新项目(在eclipse中,因为这是100%的android官方)。添加一个webview和一个asynctask,然后用你的项目在项目上做一个diff。忽略src/gen/res。希望你会发现src/gen是以错误的顺序或类似的方式构建的。

〜Anders