使用 ProGuard 值得吗?
Posted
技术标签:
【中文标题】使用 ProGuard 值得吗?【英文标题】:Is using ProGuard worth the trouble? 【发布时间】:2011-08-03 10:33:21 【问题描述】:根据我所见所闻,如果有人真的想对您的软件进行逆向工程或反编译,ProGuard 不会阻止他们。但这至少是一种适度的威慑吗?我不确定以后翻译我的堆栈跟踪是否值得。
【问题讨论】:
【参考方案1】:我会推荐 ProGuard。即使没有混淆(可以显着缩短常量池中使用的名称),它也可以删除已使用库等的“死代码”(未使用的方法)。(它也可以用来方便地将所有内容合并在一起)。
要“正确”需要一点点摆弄,尤其是。如果有动态加载的类——但非常推荐。然而,节省空间的实际好处“取决于”可以消除的内容,并且通常会随着更多的外部库而增加。
现在,对于混淆——它的作用与任何混淆器一样多:使“反编译”代码成为有意义的名称变得不可能。
混淆不会保存您的超级机密算法或隐藏您的私钥:如果 JVM(或转换后的 Dalvik)必须理解它,那么反编译器和任何真正的人都可以em> 想获取权限即可。您的代码甚至可以以字节码形式提升并简单地通过使用。反射(想象一下零文档的糟糕 API):真正想要访问的任何人都可以。但也许混淆会使这项任务在成本/支出方面不可行:“这取决于”。
不想翻译堆栈跟踪?很简单:不要将其用于调试(对于从用户那里获取跟踪没有那么有用)或不要启用混淆(其他好处仍然适用);-)
编码愉快。
【讨论】:
【参考方案2】:Pro Guard 至少可以让您的应用程序在文件大小方面变得尽可能小!
这是一个真正的优势。
在使用 eclipse 开发和编译时自动使用,如果您在项目的 default.properties 文件中有proguard.config=proguard.cfg
则提供。
这也是一个真正的优点。
【讨论】:
实际上,除非您将proguard.config=proguard.cfg
添加到项目的 default.properties 文件中,否则 Eclipse 不会调用 ProGuard。 (您可以忽略文件中有关您的更改被删除的警告;它不会发生。)请参阅this thread 了解更多信息。
哦,好吧,在我的上一个项目中没有意识到这一点,因为我在浪费时间尝试启动和运行 proguard 后从 IntelliJ 回到了 eclipse。以上是关于使用 ProGuard 值得吗?的主要内容,如果未能解决你的问题,请参考以下文章
我应该在 proGuard 上使用 dexGuard、redEX 来混淆广播接收器吗