2011-04-11 33 views
14

从我所看到并阅读的内容来看,如果有人真的想对软件进行反向工程或反编译,ProGuard不会阻止它们。但它至少是一种适度的威慑力量?我不确定是否值得稍后翻译我的堆栈跟踪的麻烦。正在使用ProGuard值得吗?

回答

16

我会推荐ProGuard。即使没有模糊处理(可以显着缩短常量池中使用的名称),它也可以删除已使用的库的“死代码”(未使用的方法)等(它也可用于将所有内容合并在一起)。

它需要一点点的“纠正”,尤其是“如果有动态加载的类 - 但非常推荐。然而,节省空间的实际好处“取决于”可以消除什么,并且通常会与更多的外部图书馆联系。

现在,对于混淆 - 它和任何混淆器一样多:使用“有意义的名称”将“反编译”代码变成不可能。然而,如果混淆不会保存您的超级秘密算法或隐藏您的私钥,但是:如果JVM(或转换后的Dalvik)必须理解它,那么反编译器和任何真正想要的人都希望获取访问可以。你的代码甚至可以通过字节码形式提取,并简单地通过。反思(想象一个可怕的API,零文档):任何人真的想要访问可以。但也许混淆将使这项任务不可行的成本/支出:“这取决于”。

不想翻译堆栈跟踪?简单:不使用它进行调试(而不是从用户获取有用的痕迹),或不能够混淆(其它福利仍然适用);-)

编码愉快。

2

职业警卫至少可以让你的应用程序变得尽可能小的文件大小!

这是一个真正的优点。

它在eclipse开发和编译时会自动使用,假如你有proguard.config=proguard.cfg到项目的default.properties文件。

这也是一个真正的优点。

+5

实际上,除非您将'proguard.config = proguard.cfg'添加到项目的default.properties文件中,否则ProGuard不会被Eclipse调用。 (您可以忽略文件中有关正在擦除的更改的警告;它不会发生。)请参阅[本主题](http://stackoverflow.com/questions/4732656/enabling-proguard-in-eclipse-for- android)获取更多信息。 – 2011-04-11 22:15:21

+0

哦,在我上一个项目中没有意识到这一点,因为我在浪费了几个小时尝试让proguard启动并运行之后,从IntelliJ移回eclipse。 – 2011-04-12 06:34:24