使用ProGuard值得麻烦吗?

18

从我所见和阅读的内容来看,如果有人真的想要反向工程您的软件或反编译它,ProGuard 将无法阻止他们。但是它至少是一种适度的威慑力吗?我不确定是否值得将来麻烦地翻译我的堆栈跟踪信息。

2个回答

18
我建议使用ProGuard。即使没有混淆(可以显著缩短常量池中使用的名称),它也可以删除未使用的库中的“死代码”(未使用的方法)等。(它还可以用于方便地将所有内容合并在一起)。
如果存在动态加载的类,则需要进行一些微调才能“正确”,但非常值得推荐。然而,从节省空间方面获得的实际效益“取决于”可以消除什么,并且通常随着更多外部库而增加。
现在,对于混淆 - 它所做的与任何混淆器一样多:使将代码“反编译”为具有有意义的名称的事情变得不可能。
混淆不能保存您的超级秘密算法或隐藏您的私钥:如果JVM(或Dalvik经过转换后)必须理解它,那么反编译器和任何真正想要访问的人都可以理解。您的代码甚至可以以字节码形式提取并通过反射简单地使用(想象一下零文档的可怕API):任何真正想要访问的人都可以。但是,也许混淆会使这项任务因成本/回报而不可行:“这取决于”。
不想翻译堆栈跟踪?简单:不要用它进行调试(对于从用户那里获取跟踪信息不是很有用),或者不要启用混淆(其他好处仍然适用);-)
祝编码愉快。

3

Proguard 至少能让你的应用程序在文件大小方面尽可能地变小!

这是一个真正的优点。

在使用 Eclipse 进行开发和编译时,如果将 proguard.config=proguard.cfg 添加到项目的 default.properties 文件中,则会自动使用它。

这也是一个真正的优点。


6
实际上,如果您没有在项目的default.properties文件中添加proguard.config=proguard.cfg,Eclipse不会调用ProGuard。(您可以忽略文件中有关更改将被擦除的警告;这并不会发生。)有关更多信息,请参阅此线程 - Ted Hopp
哦,好吧,在我的上一个项目中没有意识到这一点,因为我在浪费了数小时尝试让Proguard运行后,从IntelliJ回到了eclipse。 - chris polzer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接