Есть ли явный способ остановить ProGuard от изменения класса от реализации интерфейса?Как остановить ProGuard от удаления интерфейса Serializable от класса
У меня есть класс, который реализует java.io.Serializable
, назовем его com.my.package.name.Foo
. Я обнаружил, что после запуска ProGuard он больше не реализует Serializable
. Я получаю null
после того, как я произвел от Serializable
до Foo
и false
, если я проверяю экземпляр с instanceof Serializable
. Я удостоверился, чтобы установить ProGuard игнорировать этот класс:
-keep class com.my.package.name.Foo
Я также попытался:
-keep class com.my.package.name.Foo { *; }
, и я также попробовал весь пакет, делая это:
-keep class com.my.package.name.** { *; }
или:
-keep class com.my.package.** { *; }
а также просто держать все Serializable
классы:
-keep class * implements java.io.Serializable { *; }
, но безрезультатно. У меня есть другой класс в пакете для родственников (примерно: com.my.package.name2.Bar
), который также реализует Serializable
и используется аналогично, но не имеет проблем.
Я не уверен, что это релевантно, но я собираю это в банке для использования с Android. Код, который использует эти классы, включает их размещение в Bundle
s, поэтому мне нужно Serializable
. Я считал, что, возможно, каким-то образом ProGuard считает, что Foo
никогда не используется как Serializable
, но это кажется маловероятным, учитывая, что я передаю его как параметр Bundle.putSerializable(String, Serializable)
, а также я делаю неявный листинг: Serializable serializable = foo;
. На самом деле, когда я отлаживаю, я вижу, что Foo
попал в Bundle
, и я могу проверить Bundle
и увидеть экземпляр Foo
там, но при его получении сбрасывается.
Спасибо за вход, но я проверил с '' javap' и Foo' не реализует 'Serializable' больше. Ваш комментарий о 'ClassCastException' имеет смысл для меня тоже, но он просто не работает так. Мое подозрение в том, что что-то произошло в сокращении и оптимизации, чтобы изменить поведение от того, что можно ожидать от нормального Java-кода, поскольку на тот момент это уже не Java, а байт-код. – kabuko
Я обнаружил, что если у меня ProGuard установлен '-dontshrink', а затем явным образом использую' -keep, allowoptimization, allowhrinking, allowobfuscation Foo', то 'Foo' будет по-прежнему реализовывать' Serializable', но, к сожалению, это не решение для меня так как я хотел бы свернуть, чтобы быть в целом. – kabuko
Если у вас есть небольшой образец, который иллюстрирует проблему, я рассмотрю ее. Вы можете найти мой адрес электронной почты на странице «Обратная связь» веб-сайта ProGuard. –