Google Play Services 5.0.77

С 25 июня два несвязанных приложения, которые используют рекламу, начали использовать этот NPE

java.lang.NullPointerException at zo.a(SourceFile:172) at aeh.a(SourceFile:120) at afw.run(SourceFile:14) at afy.run(SourceFile:30) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) at java.lang.Thread.run(Thread.java:856) 

Я думаю, что это связано с обновлением игровых сервисов Google. Кто-нибудь может помочь мне в этом вопросе?

Просто чтобы подтвердить, что проблема связана с игровым сервисом, мне удалось получить это из краштитики из потока под названием AdWorker:

 thread at java.lang.Object.wait(Object.java) at java.lang.Thread.parkFor(Thread.java:1231) at sun.misc.Unsafe.park(Unsafe.java:323) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:813) at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:973) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1282) at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:207) at zo.a(SourceFile:147) at zo.a(SourceFile:170) at aeh.a(SourceFile:120) at afw.run(SourceFile:14) at afy.run(SourceFile:30) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) at java.lang.Thread.run(Thread.java:856) 

Это не подходящее место … но нет места вообще, где сообщить об этом

Количество исключений удвоилось с 1 июля, сейчас почти в 3 раза больше, чем 27 июня.

Проблема с проектом Android google

Обсуждение теперь в этой теме: admob google Heading group

Последний ответ от google «Мы знаем об этих сбоях и работаем над исправлениями. Мы надеемся вытеснить эти исправления в ближайшие две-две недели». (7 июля)

Solutions Collecting From Web of "Google Play Services 5.0.77"

Нашел это решение Mateusz Matela на странице https://groups.google.com/forum/#!topic/google-admob-ads-sdk/DkjtCx_Zvn8 .

Я пробовал на Motorola DEFY +, который разбился из этой ошибки два раза в три раза. Кажется, что он работает, даже когда предупреждения, связанные с этой ошибкой, появляются в журнале. Он даже говорит, что «поток AdWorker выбрал исключение». Мои объявления снова появляются при продолжении использования приложения.

 final UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread thread, Throwable ex) { if (thread.getName().startsWith("AdWorker")) { Log.w("ADMOB", "AdWorker thread thrown an exception.", ex); } else if (defaultHandler != null) { defaultHandler.uncaughtException(thread, ex); } else { throw new RuntimeException("No default uncaught exception handler.", ex); } } }); 

Сегодня Google публикует это: http://android-developers.blogspot.fr/2014/07/google-play-services-5.html

И теперь это работает для меня. Просто попробуйте еще раз обновить GooglePlayService на своем мобильном телефоне и обновить ADT.

Редактировать :

Код для проверки версии GPS:

 // Check if GooglePlay Service is good; resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this.getActivity()); if (resultCode != ConnectionResult.SUCCESS) { if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) { GooglePlayServicesUtil.getErrorDialog(resultCode, this.getActivity(), 1).show(); rootView = inflater.inflate(R.layout.fragment_googleplayerror, container, false); return rootView; } else { Log.i(Tag, "This device is not supported."); getActivity().finish(); } } 

Я получил точно такие же ошибки в разных версиях Android после обновления admob для сервисов Google Play. Я думаю, что это невозможно решить на стороне пользователя.

Это связано с обновлением служб Play, см. Пример журнала сбоев ниже. Поскольку он вылетает onCreate, это может происходить, когда пользователь нажимает на объявление или определенный тип объявления

 USER_COMMENT= ANDROID_VERSION=4.1.2 APP_VERSION_NAME=8.9 BRAND=samsung PHONE_MODEL=GT-I9100 CUSTOM_DATA= STACK_TRACE=java.lang.RuntimeException: Unable to start activity ComponentInfo{xxxxx/com.google.android.gms.ads.AdActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) at android.app.ActivityThread.access$700(ActivityThread.java:140) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4921) 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:1027) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at acm.a(SourceFile:215) at acz.onTransact(SourceFile:58) at android.os.Binder.transact(Binder.java:326) at com.google.android.gms.internal.ck$a$a.onCreate(Unknown Source) at com.google.android.gms.ads.AdActivity.onCreate(Unknown Source) at android.app.Activity.performCreate(Activity.java:5206) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) ... 11 more java.lang.NullPointerException at acm.a(SourceFile:215) at acz.onTransact(SourceFile:58) at android.os.Binder.transact(Binder.java:326) at com.google.android.gms.internal.ck$a$a.onCreate(Unknown Source) at com.google.android.gms.ads.AdActivity.onCreate(Unknown Source) at android.app.Activity.performCreate(Activity.java:5206) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) at android.app.ActivityThread.access$700(ActivityThread.java:140) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4921) 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:1027) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) at dalvik.system.NativeStart.main(Native Method) 

Я видел ту же самую проблему с одним из моих приложений с 25 июня. Вы правы, это проблема Google, я думаю, что мне удалось ее решить, обновив мою библиотеку поддержки Android до версии 20 (я использовал поддержку android-v4.jar) и своих сервисов Google Play до версии 17.

Я не уверен, какая из двух ревизий разрешила это, но прошло 24 часа, и отчеты Crash прекратились.

EDIT: Извините, это все еще не устранено. Но я получил ответ от команды SDK AdMod, что они изучают ее. https://groups.google.com/forum/#!topic/google-admob-ads-sdk/DkjtCx_Zvn8

Это частичное решение, и кажется (до сих пор) исправить 100% сбоев: вы должны отложить запрос объявления на несколько миллисекунд, чтобы избежать этого сбоя!

Упрощенный пример:

  Handler handler = new Handler() { @Override public void handleMessage(Message msg) { AdRequest adRequest = new AdRequest.Builder().build(); adView.loadAd(adRequest); super.handleMessage(msg); } }; if (handler != null) { handler.sendEmptyMessageDelayed(0, 200); } 

Я обнаружил обходное решение.

В моем случае я показывал объявление из службы, выполняемой в пользовательском процессе. Например:

  <service android:name="com.example.MyService" android:exported="false" android:process=":svc" /> 

В моем AndroidManifest.xml я установил тот же атрибут android: process для объявленного AdActivity, и проблема исчезла.

  <activity android:name="com.google.android.gms.ads.AdActivity" android:process=":svc" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" /> Размер  <activity android:name="com.google.android.gms.ads.AdActivity" android:process=":svc" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" /> 

В случае с моей заявкой я не особо забочусь о том, в каком процессе выполняется рекламная активность, поэтому этого обходного пути достаточно. Надеюсь, это будет полезно для других.

Я нашел временное полу-решение. Я использую совет thiagolr выше с отложенным запросом объявления:

  Handler handler = new Handler() { @Override public void handleMessage(Message msg) { AdRequest adRequest = new AdRequest.Builder().build(); adView.loadAd(adRequest); super.handleMessage(msg); } }; if (handler != null) { handler.sendEmptyMessageDelayed(0, 200); } 

Кроме того, я удалил методы onResume и onPause, поэтому не знаю, какое решение мне помогает, но до этого обходного пути у меня было 100-130 java.lang.NullPointerException в zo.a (SourceFile: 172) в день. После этого обходного пути у меня было 6-10 NullPointerException в день. Если вы хотите, вы можете попробовать это решение отдельно, чтобы определить, какая из них помогает.

Мои удаленные методы в действии:

 // @Override // public void onPause() { // adView.pause(); // super.onPause(); // } // // @Override // public void onResume() { // super.onResume(); // adView.resume(); // } 

Согласно: https://groups.google.com/forum/#!topic/google-admob-ads-sdk/DkjtCx_Zvn8

Некоторым удалось добиться успеха, добавив android: theme = "@ android: style / Theme.Translucent" в действие android: name = "com.google.android.gms.ads.AdActivity" в манифесте.

Теперь я запускаю новую версию с этим исправлением. Посмотрите через пару дней, если это поможет.

Перейдите к использованию другого ad sdk. Я попробовал большую часть упомянутой вещи, и ошибка все еще остается. И я лично ненавижу применять такие хаки в коде. Поэтому решили переключиться, используя Google AdDd с ошибками и ошибками.