Я использую pcap4j на Android, и все хорошо работает в Debug Build.Но в сборке релиза при активации Proguard / R8 выдается следующее исключение:
java.lang.IllegalStateException: Unsupported target: class org.pcap4j.packet.IpV4Rfc1349Tos
at org.pcap4j.packet.factory.PacketFactoryBinder.getPacketFactory(SourceFile:2)
at org.pcap4j.packet.factory.PacketFactories.getFactory(SourceFile:2)
at org.pcap4j.packet.IpV4Packet$IpV4Header.<init>(SourceFile:6)
at org.pcap4j.packet.IpV4Packet.<init>(SourceFile:2)
at org.pcap4j.packet.IpV4Packet.newPacket(SourceFile:2)
at org.pcap4j.packet.factory.StaticEtherTypePacketFactory.newInstance(SourceFile:10)
at org.pcap4j.packet.factory.StaticEtherTypePacketFactory.newInstance(SourceFile:1)
at org.pcap4j.packet.IpSelector.newPacket(SourceFile:8)
В качестве обходного пути это работает нормально, если я добавлю это правило:
-keep class org.pcap4j.packet.**
Но с вышеправило, все классы хранятся с помощью средства сжатия и не оптимизируются
Мой вопрос заключается в том, как написать более строгое правило для максимального сокращения pcap4j и сохранения функциональности без исключения throw *
Я пробовал тоже с приведенными ниже правилами, новсе еще вылетает:
-keepclassmembernames class org.pcap4j.packet.**
-keepclassmembers class org.pcap4j.packet.**
-keepnames class org.pcap4j.packet.**
Так что еще один обходной путь - сохранить эти 2 класса в этом случае, и все будет работать хорошо:
-keep class org.pcap4j.packet.IpV4Packet
-keep class org.pcap4j.packet.IpV4Rfc1349Tos
Но я прошу "общее" правило,потому что в этом случае приложение может использовать другие классы, подобные приведенным выше.
Спасибо