安全异常:调用者不再运行,上次已停止。

8

描述:

我们在Firebase控制台上观察到用户使用Android 8(Oreo)+设备时发生崩溃。堆栈跟踪显示,这是您的内部方法导致了这个致命的异常。

环境和设备详细信息

设备信息:

  • 设备:三星、华为、HMD Global、小米、其他
  • 操作系统版本:Android 8.0(Oreo)、Android 9.0(Pie)
  • 崩溃百分比:Android 8.0(99%),Android 9.0(1%)

OneSignal SDK版本:

buildscript {
    repositories {
        maven { url 'https://plugins.gradle.org/m2/'}
    }
    dependencies {
        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.11.0, 0.99.99]'
    }
}
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

dependencies {

 implementation('com.onesignal:OneSignal:[3.9.1, 3.99.99)') {
        exclude group: 'com.google.android.gms'
    }

}

堆栈跟踪信息

Caused by java.lang.SecurityException: Caller no longer running, last stopped +2s26ms because: timed out while starting
       at android.os.Parcel.readException(Parcel.java:1959)
       at android.os.Parcel.readException(Parcel.java:1905)
       at android.app.job.IJobCallback$Stub$Proxy.dequeueWork(IJobCallback.java:191)
       at android.app.job.JobParameters.dequeueWork(JobParameters.java:196)
       at android.support.v4.app.JobIntentService$JobServiceEngineImpl.dequeueWork(SourceFile:314)
       at android.support.v4.app.JobIntentService.dequeueWork(SourceFile:639)
       at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(SourceFile:389)
       at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(SourceFile:382)
       at android.os.AsyncTask$2.call(AsyncTask.java:333)
       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
       at java.lang.Thread.run(Thread.java:764)

我们99%的崩溃问题发生在Android O上,其中很多用户使用三星设备(但这似乎不仅限于三星,还有相当数量的HTC、LG、Google等设备)。

如果您需要更多信息,请告知我们。


1
这是一个已知问题,发生在所有搭载Android 8.0+的设备上。我认为这与作业服务有关。看一下这个链接,也许能在某种程度上帮到你:https://github.com/evernote/android-job/issues/255https://issuetracker.google.com/issues/63622293 - Umair
感谢您的回复。我正在使用OneSignal SDK,它正在使用作业服务。如何解决问题,因为问题出在库中。 - Fazal Hussain
1
如果问题出在库文件上,你有两种解决方法。一是为那个特定的类找到一个解决方法,或者找到另一个库文件。如果你可以 fork 那个库文件并获得那些类的访问权限,然后修改代码。否则你就只能等待问题被解决了 ;). - Umair
@FazalHussain 有什么解决方案吗? - Royz
我没有找到任何解决方案,如果有人找到了,请告诉我。 - Fazal Hussain
1个回答

1

只有在启用proguard时才会出现此问题。将以下内容添加到我的proguard规则中,即可使OneSignal在Android 8.0和8.1上成功运行:

-keep class com.onesignal.JobIntentService$* {*;}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接