Службы Google для игр 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 Play. Кто-нибудь может помочь мне в этом вопросе?

Просто чтобы подтвердить, что проблема связана с игровым сервисом, мне удалось получить это от краш-тестов из потока под названием 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 июля)

Ответ 1

Нашел это решение Матеуша Матела в 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);
            }
        }
});

Ответ 2

Сегодня 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();
                }
            }

Ответ 3

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

Ответ 4

Это связано с обновлением служб 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)

Ответ 5

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

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

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

Ответ 6

Это частичное решение, и кажется, что до сих пор исправлено 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);
    }

Ответ 7

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

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

    <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" 
        />

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

Ответ 8

Я нашел временное полу-решение. Я использую 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();
//    }

Ответ 9

В соответствии с: 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" в манифесте.

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

Ответ 10

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