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