|  | # Keep class's integer static field for MessageUtils to parsing their name. | 
|  | -keepclassmembers class com.android.server.**,android.net.**,com.android.networkstack.** { | 
|  | static final % POLICY_*; | 
|  | static final % NOTIFY_TYPE_*; | 
|  | static final % TRANSPORT_*; | 
|  | static final % CMD_*; | 
|  | static final % EVENT_*; | 
|  | } | 
|  |  | 
|  | -keep class com.android.networkstack.tethering.util.BpfMap { | 
|  | native <methods>; | 
|  | } | 
|  |  | 
|  | -keep class com.android.networkstack.tethering.util.TcUtils { | 
|  | native <methods>; | 
|  | } | 
|  |  | 
|  | -keep class com.android.networkstack.tethering.util.TetheringUtils { | 
|  | native <methods>; | 
|  | } | 
|  |  | 
|  | # Ensure runtime-visible field annotations are kept when using R8 full mode. | 
|  | -keepattributes RuntimeVisibleAnnotations,AnnotationDefault | 
|  | -keep interface com.android.networkstack.tethering.util.Struct$Field { | 
|  | *; | 
|  | } | 
|  | -keepclassmembers public class * extends com.android.networkstack.tethering.util.Struct { | 
|  | *; | 
|  | } | 
|  |  | 
|  | # The lite proto runtime uses reflection to access fields based on the names in | 
|  | # the schema, keep all the fields. | 
|  | -keepclassmembers class * extends com.android.networkstack.tethering.protobuf.MessageLite { | 
|  | <fields>; | 
|  | } |