Proguard: JobIntentService IllegalArgumentException при включении запутывания - PullRequest
0 голосов
/ 13 апреля 2019

Когда я включаю Proguard для одного из моих пакетов библиотеки Android, это приводит к ошибке времени выполнения в коде 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?

Класс пробных ключей - * расширяет JobIntentService, но не работает

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

Вы должны сохранить все классы, на которые есть ссылки в Manifest.xml, например:

-keep public class * extends android.app.Service

... иначе он может жаловаться no such service, указывая на пакет R.

Здесь также хранятся экземпляры JobIntentService, что не является настоящей проблемой (то есть, что имя класса некоторого экземпляра Service, на которое есть ссылка в Manifest.xml, было запутано). Дело в том, что JobIntentService extends Service и любые Service должны быть перечислены в Manifest.xml, и поэтому использование общих правил имеет больше смысла, чем использование определенного правила.

0 голосов
/ 13 апреля 2019

Вам необходимо указать полный путь к JobIntentService, файлы proguard не поддерживают импорт: -keepnames class * extends android.support.v4.app.JobIntentService

По-видимому, исключение выдается, потому что класс запутан.

...