Proguard:JobIntentService IllegalArgumentException启用模糊处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Proguard:JobIntentService IllegalArgumentException启用模糊处理相关的知识,希望对你有一定的参考价值。

当我为我的一个android库包启用Proguard时,它会导致JobIntentService代码中的运行时错误。我的包中的服务扩展了JobIntentService,并且在入队时间内失败,因为它被混淆为另一个名称。以下是r是服务的错误

java.lang.IllegalArgumentException: No such service ComponentInfocom.example.package/com.example.foo.r
    at android.os.Parcel.readException(Parcel.java:2008)
    at android.os.Parcel.readException(Parcel.java:1950)
    at android.app.job.IJobScheduler$Stub$Proxy.enqueue(IJobScheduler.java:211)
    at android.app.JobSchedulerImpl.enqueue(JobSchedulerImpl.java:53)

为什么抛出这个异常?是否有一种保留扩展JobIntentService的类名的通用方法?

尝试-keepnames类*扩展JobIntentService但不起作用

答案

你必须保留所有在Manifest.xml中引用的类,例如:

-keep public class * extends android.app.Service

...否则它可能会抱怨no such service,同时指向包R

这也保留了JobIntentService的实例,这不是这里的实际问题(这是Service中引用的某些Manifest.xml实例的类名被混淆了)。关键是,JobIntentService extends Service和任何Service需要在Manifest.xml中列出,因此使用一般规则比使用特定规则更有意义。

另一答案

您需要指定JobIntentService的完整路径,proguard文件不支持导入:-keepnames class * extends android.support.v4.app.JobIntentService

似乎抛出了异常,因为该类被混淆了。

以上是关于Proguard:JobIntentService IllegalArgumentException启用模糊处理的主要内容,如果未能解决你的问题,请参考以下文章

来自 JobIntentService 的吐司

JobIntentService 的 onDestroy 被调用后会发生啥?

JobIntentService 不调用 OnHandleWork

JobIntentService - onHandleWork 并不总是被调用?

JobIntentService 不会在 Android 8.0 上立即启动

Kotlin:如何从 Fragment 调用 JobIntentService?