我在 Android 上使用 pcap4j,并且在 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 并保持功能而不抛出异常
我也尝试过以下规则,但仍然崩溃:
-keepclassmembernames class org.pcap4j.packet.**
-keepclassmembers class org.pcap4j.packet.**
-keepnames class org.pcap4j.packet.**
因此,另一种解决方法是在这种情况下保留这两个类,一切都会正常:
-keep class org.pcap4j.packet.IpV4Packet
-keep class org.pcap4j.packet.IpV4Rfc1349Tos
但我要求一个“一般”规则,因为在这种情况下,该应用程序可能会使用上述其他类。
谢谢