java.lang.ClassNotFoundException:由AdMob / Google Play Services引起的android.os.AsyncTask?

自2014年11月21日以来,我收到了以下堆栈的数百个崩溃报告。

崩溃只发生在API Level 10设备上(该应用程序支持9+)

在崩溃开始之前的几个星期,应用程序的相同版本运行良好。 这让我觉得这个问题是由最近推向Android 2.3设备的一些无线更新造成的。

我在我的应用中使用了AdMob中介(现在是Google Play服务库的一部分)和其他几个广告networkingSDK。

我怀疑谷歌播放服务库造成的崩溃,因为它是应用程序的唯一的一部分,据我所知,可能会被更新(这不会是第一次越野车更新导致崩溃)。

正如OP 在这里所回答的那样,是否有可能在AdMob创build的用于显示横幅广告的线程中触发未捕获的exception, 可能会将整个stream程置于不能创build类的新实例的状态?

最近有没有人有类似的问题?

java.lang.NoClassDefFoundError: com.myapp.MyClassExtendingAsyncTask at com.myapp.x.run(SourceFile:417) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3859) 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:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:647) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassNotFoundException: com.myapp.MyClassExtendingAsyncTask in loader dalvik.system.PathClassLoader[/data/app/com.myapp-1.apk] at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240) at java.lang.ClassLoader.loadClass(ClassLoader.java:551) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) ... 10 more 

Solutions Collecting From Web of "java.lang.ClassNotFoundException:由AdMob / Google Play Services引起的android.os.AsyncTask?"

好的,看起来这是Google Play服务的其中一个版本的问题。 请参阅https://code.google.com/p/android/issues/detail?id=81083

看起来像一个工作可能会添加到您的Application#onCreate()

 package acme.com.myAppName; import android.app.Application; public class MyApplication extends Application { @Override public void onCreate() { // begin add try { Class.forName("android.os.AsyncTask"); } catch(Throwable ignore) { } // end add super.onCreate(); } } 

注意不要忘记在你的AndroidManifest.xmlconfiguration你的Application类(如果你还没有的话)。

 <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:name="acme.com.myAppName.MyApplication" > ... </application> 

为了扩大上面的答案,因为我不知道应用程序#onCreate()是什么,并没有在我的应用程序中实现一个。 我所做的是在我的应用程序中创build一个新的类与以下内容:

 package acme.com.myAppName; import android.app.Application; public class myApplication extends Application { @Override public void onCreate() { try { Class.forName("android.os.AsyncTask"); } catch(Throwable ignore){} super.onCreate(); } } 

然后我用android:name="acme.com.myAppName.myApplication"更新我的AndroidManifest.xml文件,使用myApplication类,如下所示:

 <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:name="acme.com.myAppName.myApplication" > ... </application> 

同样的问题在这里,23/11以来,我在2.x客户端上遇到了大约1500个ClassNotFoundException错误,并呈上升趋势。 该应用程序没有更新几个月,所以我同意你关于谷歌播放服务ota更新的假设

我包围了我的adview.loadAd(adrequest); 用try catch块,这已经解决了我的问题。

这里是代码片段:

  try { adview.loadAd(adRequest); } catch(java.lang.NoClassDefFoundError ncdfe) { ncdfe.printStackTrace(); Log.d("AD ERROR", "ERROR LOADING AD"); }