使用ProGuard模糊Java保护的元素

Sco*_*cot 2 java obfuscation proguard

我正在开发一个由几个单独的类组成的库,这些类一起工作以执行库的功能.其中一个类然后公开了一些公共函数,所有公共函数都使用外部代码来使用库.

由于不同的类需要交互,我将它们全部放在同一个包中并且有很多"受保护"的东西(类和函数).

问题是ProGuard默认不会混淆这些受保护的元素,因为它们有可能在以后与同一个包中的另一个类组合.但是,出于安全原因,我想阻止这种情况.

所以问题是,除了私有元素之外,我还可以强制ProGuard对这些受保护的元素进行模糊处理吗?

换句话说,有没有办法告诉ProGuard"我已经完成了向这个软件包添加内容的东西,请不要混淆每个类中的私有内容,而是包中的受保护内容"?

谢谢!

Eri*_*une 7

ProGuard会混淆与配置中的某个-keep选项不匹配的所有内容.例如,从ProGuard手册>示例>典型的库:

-keep public class * {
    public protected *;
}
Run Code Online (Sandbox Code Playgroud)

此规范保留所有公共和受保护的类,字段和方法.ProGuard模糊了其他任何事情.如果你想混淆更多,你必须指定更少的元素来保留,例如使用一个或多个这样的选项:

-keep public class mypackage.MyPublicClass {
    public void myPublicMethod();
}
Run Code Online (Sandbox Code Playgroud)

您可以使用通配符或其他模板,如ProGuard手册中所述.

因此,默认情况下,ProGuard会对所有内容进行模糊处理,除非您指定保留一些元素.ProGuard无法猜出您想要保留的内容.