我尝试了:
-keep class !com.foo.** { *; }
-keep class com.foo.bar.** { *; }
,但它混淆了com.foo以外的其他类。*(我不想要)
我也尝试了:
-keep class !com.foo.**, com.foo.bar.** { *; }
,它无法解析。
从您的描述中,我了解您要将所有内容都保留在com.foo.bar
软件包中( Subpackages?)。您可以通过以下规则实现这一目标:
-keep class com.foo.bar.** { *; }
**
模式也将匹配子弹,如果您只想使用当前软件包,请改用*
。
如果您使用这样的规则:
-keep class !com.foo.** { *; }
您实际上将保留除了com.foo。**,因此您应该谨慎使用排除模式。之后始终包含至少一个包含模式。排除模式应更具体地作为包含模式,请参见下文。
此规则应正确解析(只是对其进行测试),但将行不通,因为Proguard找到匹配项后将停止评估规则:
-keep class !com.foo.**, com.foo.bar.** { *; }
排除模式 !com.foo.**
将与com.foo和子书中的所有内容匹配,因此它也将匹配com.foo.bar。