是否有任何工具可以从Java .class文件中删除调试信息,就像/usr/bin/strip
可以从Linux上的C / C ++目标文件中删除一样?
编辑:我喜欢Thilo和Peter Mmm的答案:Peter很简短,并且忽略了我对JDK的附件; Thilo的ProGuard建议是我无论如何都要检查它所提供的所有额外功能。谢谢Thilo和Peter!
答案 0 :(得分:3)
ProGuard(例如Android SDK附带的代码可以减少代码大小),可以进行各种操作来缩小JAR文件:
他们没有提到删除该列表中的调试信息,但我想他们也可以这样做。
更新:是的,确实:
默认情况下,编译后的字节码仍然包含很多调试信息:源文件名,行号,字段名,方法名,参数名,变量名等。这些信息可以直接反编译字节码和反向工程整个计划。有时,这是不可取的。像ProGuard这样的混淆器可以删除调试信息并用无意义的字符序列替换所有名称,这使得对代码进行反向工程变得更加困难。它进一步压缩代码作为奖励。除了异常堆栈跟踪中给出的类名,方法名和行号外,该程序在功能上保持等效。