使用ProGuard模糊Java保护的元素

时间:2011-11-01 05:46:58

标签: java obfuscation proguard

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

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:7)

ProGuard会混淆与配置中的某个-keep选项不匹配的所有内容。例如,来自ProGuard manual > Examples > A typical library

-keep public class * {
    public protected *;
}

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

-keep public class mypackage.MyPublicClass {
    public void myPublicMethod();
}

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

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