java 混淆私有属性方法_为什么一些包私有类不会被Proguard混淆?

使用Android Studio 3.2中的Android项目,启用了Proguard和一些特定规则,我无法弄清楚以下内容:

客户端代码使用的库模块中的特定包(及其子包)通过以下规则保留:

-keep public class com.mylib.mypackage.** {

public protected *;

}

现在,在这个包中还有许多包私有类,该规则不应该选择它们 . 其中一些类是有效混淆的,无论是用自己的名字还是成员名称,这都很好 .

相反,有一些类,实现公共接口,其类名称不会被混淆,而我希望它们应该 . 为了完整性,当成员名称不是界面的一部分时,它们被有效地混淆 .

例:

/* package */ class InternalComponent implements ExternalInterface {

// ExternalInterface is kept: Ok

// InternalComponent is kept: don't like, I'd like it renamed

@Override

public void ExternalMethod() {

// this is kept: Ok

}

public void InternalMethod() {

// this is renamed: Ok

}

}

我想强调 InternalComponent 是在其他(保留)类中创建的,并且只通过 ExternalInterface 返回到客户端代码 .

如果可能的话,我怎样才能混淆他们的 class 名称呢?

Edit

在@emandt回答Proguard输出文件后,我仔细检查了 com.mylib.mypackage.InternalComponent 列在 seeds.txt 中,根据this blog post列出了保留规则匹配的所有项目 . 所以,出于某种原因,上面的规则也选择了包私有类,这对我来说仍然是错误的 .

Edit #2 与此同时,我最终采用了@shizhen提出的完全相同的方法 . 为了完整性,为了将排除扩展到任何名为 internal 的包,我将我的proguard规则修改为:

-keep public class !com.mylib.mypackage.**.internal.*, com.mylib.mypackage.** {

public protected *;

}

(注意逗号前的第一部分,前缀为 ! )

我将标记@shizhen的答案,但我想好奇为什么原始规则也在挑选包私有组件 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值