我正在寻找一个支持maven-plugin的java混淆器?我们尝试使用ProGuard,但遇到了一些运行时问题,如果不进行混淆则不会发生这些问题。是否有其他混淆器。
答案 0 :(得分:5)
由于ProGuard的运行方式类似于大多数其他Java混淆器(至少是我熟悉的那些),因此很可能会遇到类似的问题。 (实际上,ProGuard不遗余力地发出兼容的字节码,而传言其他一些混淆器对此不太警惕。)
你有什么问题?通常,使用混淆的问题是名称错误 - 遇到其他库无法找到公共类/方法/字段或使用反射问题的问题。这通常可以通过非常小心地允许修改哪些类名和方法名来解决。
上次我在Java项目中使用混淆时,我们对混淆的内容相当保守。我们将我们想要混淆的类放入其原始包的一个名为“internal”的子包中,我们只对 .internal。进行了模糊处理。我们发现这比尝试确定哪些不来进行混淆更有用。
混淆器的另一个问题是它们的优化。虽然我没有看到ProGuard中的优化错误,但这肯定不是不可能的。无论如何,我将其关闭有几个原因:首先,当您为客户获得(混淆的)堆栈跟踪时,很难解开名称以确定出错的地方。如果您的混淆器已经优化了任何东西,那么堆栈跟踪可能毫无意义。其次,它是不必要的:JVM非常非常擅长优化字节代码,这会干扰它(从而可能使其变得更糟。)
答案 1 :(得分:3)
Stringer Java Obfuscation Toolkit提供了很多与IDE和构建系统集成的选项,包括Maven。
答案 2 :(得分:0)
几年前,我遇到了类似的问题。 如果我没记错的话,ProGuard错误地优化了短私有方法: 它确实在内联期间消除了“同步”关键方法的影响。
我们使用ProGuard的-dontoptimize
选项解决了这个问题。