我有一个即将使用ProGuard进行混淆的库。 “库模式”几乎适用于我的用例,即保留所有公共和受保护的类和类成员几乎没有问题。 但是由于Java的可见性要求,某些成员不能成为私有或私有包,因此它们是公共类,尽管它们不应该在库中。我想让它们混淆,以便更清楚地表明这些类不属于公共API,以及更好的混淆和更小的库jar。 有没有办法从一个proguard“keep”规则中排除某些项目,而不用按名称指定每个项目(使用'!')。 理想情况下,我想用标记注释来注释这些类和成员,但据我所知,Proguard只能被告知保留带有某些注释的项目。
答案 0 :(得分:4)
您确实只能保留项目。如果要排除某些类成员,则必须通过列出或注释要保留的类成员来执行此操作。指定类名时,您可以提供一个列表,可选择“!”排除名称。指定类成员名称和类型时,这是不可能的。但是,在这两种情况下,您都可以使用通配符。如果为内部类选择特殊名称,则可能有效:
-keep public class * {
public protected *** !myInternalField*;
public protected *** !myInternalMethod*(...);
}