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 的 onDestroy 被调用后会发生啥?
JobIntentService 不调用 OnHandleWork
JobIntentService - onHandleWork 并不总是被调用?