Proguard:JobIntentService IllegalArgumentException启用模糊处理

问题描述 投票:0回答:2

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

java.lang.IllegalArgumentException: No such service ComponentInfo{com.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但不起作用

android obfuscation android-proguard
2个回答
0
投票

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

-keep public class * extends android.app.Service

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

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


-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.