首页 文章

从Proguard的保留规则中排除某些类

提问于
浏览
4

我有一个即将使用ProGuard进行混淆的库 . "Library mode"几乎适用于我的用例,即保留所有公共和受保护的类和类成员几乎没有问题 . 但是由于Java的可见性要求,某些成员不能成为私有或私有包,因此它们是公共类,尽管它们不应该在库中 . 我想让它们混淆,以便更清楚地表明这些类不属于公共API,以及更好的混淆和更小的库jar . 有没有办法从proguard "keep"规则中排除某些项目,而无需按名称指定每个项目(使用'!') . 理想情况下,我想用标记注释来注释这些类和成员,但据我所知,Proguard只能被告知要保留带有某些注释的项目 .

1 回答

  • 4

    你只能保留物品 . 如果要排除某些类成员,则必须通过列出或注释要保留的类成员来执行此操作 . 指定类名时,您可以提供一个列表,可选择使用"!"来排除名称 . 指定类成员名称和类型时,这是不可能的 . 但是,在这两种情况下,您都可以使用通配符 . 如果您为内部类选择特殊名称,这可能有效:

    -keep public class * {
      public protected *** !myInternalField*;
      public protected *** !myInternalMethod*(...);
    }
    

相关问题