Android 8 handleReceiver / startServiceCommon bug - PullRequest
0 голосов
/ 03 июля 2018

, так как нам всем нравится это короткое и четкое:

У меня в магазине есть приложение, которое выдает сбой, которое я не могу воспроизвести (на 4 разных устройствах android8). Согласно GPlay, это RuntimeException в ActivityThread.handleReceiver и только в Android 8.x.

Поскольку это происходит только с «некоторыми» устройствами, имеющими версию PlayStore, я могу предположить, что это из-за ProGuard и / или подписи. Также я НЕ пользуюсь никакими службами / BroadcastReceiver в своем приложении, так как Android 8 имеет startForegroundService вместо startService. В моем приложении я использую FusedLocationProviderClient и последнюю версию GPlay Service, но думаю, что они должны работать безупречно.

StackTrace:

java.lang.RuntimeException: в android.app.ActivityThread.handleReceiver (ActivityThread.java:3399)
на android.app.ActivityThread.-wrap18 (неизвестный источник) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1780) на android.os.Handler.dispatchMessage (Handler.java:105) на android.os.Looper.loop (Looper.java:164) в android.app.ActivityThread.main (ActivityThread.java:6944) в java.lang.reflect.Method.invoke (родной метод) в com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:327) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374

Причина: java.lang.IllegalStateException:

at android.app.ContextImpl.startServiceCommon (ContextImpl.java:1538) на android.app.ContextImpl.startService (ContextImpl.java:1484) на android.content.ContextWrapper.startService (ContextWrapper.java:663) на com.evernote.android.job.WakeLockUtil.startWakefulService (WakeLockUtil.java:95) в com.evernote.android.job.JobRescheduleService.startService (JobRescheduleService.java:24) в com.evernote.android.job.JobManager. (JobManager.java:191) в com.evernote.android.job.JobManager.create (JobManager.java:114) в com.evernote.android.job.JobBootReceiver.onReceive (JobBootReceiver.java:49) в android.app.ActivityThread.handleReceiver (ActivityThread.java:3392)

Я уже нашел связанную ветку, которая предлагает расширить proGuardconfig, поэтому я сделал - к сожалению, без исправления:

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.preference.Preference
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
  • Любые подсказки и отзывы приветствуются!

1 Ответ

0 голосов
/ 04 июля 2018

Сложность Android заключается в том, что он с открытым исходным кодом, что означает множество разных версий на множестве разных устройств. Самое замечательное в этом то, что это с открытым исходным кодом! Это означает, что вы можете прочитать исходный код ваших проблем.

Вот как я отлаживаю отчеты о сбоях следующим образом:

  • Я использую Google, чтобы найти исходный код "ContextImpl.java startServiceCommon android source"
  • Интересно, что при этом я нашел кого-то еще с проблемой здесь Похоже, в библиотеке evernote android-job была ошибка. В Android O фоновые задачи должны вызывать Context.startForegroundService вместо Context.startService. Вам нужно обновить библиотеку?
  • если бы я не нашел этого, я бы посмотрел на исходный код .
    • если вы нажмете [вина] в верхней части этой страницы, вы увидите, что этот код был добавлен здесь
    • описание изменения говорит вам, что это связано с поиском процессов, запускающих объекты, работающие в фоновом режиме, когда они не должны.
  • , кажется, есть еще несколько хороших ответов на этот вопрос StackOverflow
...