Proguard混淆对.apk大小的影响

时间:2014-09-24 19:14:28

标签: android open-source proguard obfuscation

我正在为android开发一个开源(ASL2.0)应用程序:https://github.com/Centril/sleepfighter/tree/librarize

因此,从安全角度来看,不需要对代码进行模糊处理。 但我想知道在缩小.apk档案的大小方面是否会有一些好处。

我自己进行了测试,并且在不使用和使用混淆时分别从~2650 KB减少到2335 KB ...您有什么经历?

为了减少.apk大小,即使这是一个开源应用程序,我是否应该对这些版本进行模糊处理?

2 个答案:

答案 0 :(得分:3)

在这种情况下,参数 for proguard是优化代码。显然里程会有所不同,但Proguard会尝试内联并崩溃。从理论上讲,这可以提高应用程序的性能。

关于尺寸 - 您的大部分APK足迹可能会导致我的资源,如图片,而不是代码。所以Proguard将无法在那里提供太多帮助,因为它似乎已经找到了。

反对 Proguard的一些论点是:

  1. 它可能会引入错误,例如剥离它不应该拥有的类。
  2. 稍微难以理解堆栈跟踪,如果您正在收集崩溃信息,则需要保留转换文件。
  3. 还有一件事可能会破坏你的构建过程,并成为进入项目贡献者的障碍。

答案 1 :(得分:3)

没有确定的答案,但在我的实验中:

  • classes.dex的大小通常会减少30-90%。这主要取决于项目库的数量和大小。如果未使用这些库的大部件,ProGuard可以删除它们。 Scala应用程序往往是最极端的例子,它们具有大型Scala运行时库。

  • 最终.apk文件的大小通常会减少4-70%。这主要取决于ProGuard未受影响的资源和资产的大小。

启用优化后,对于计算密集型应用程序(Dalvik字节码),应用程序的性能提高了20%。

在ART环境中,较小的代码库可以在将应用程序下载到设备后加快预编译速度。此外,ProGuard仍然可以将ART的性能提高多达30%。显然,ProGuard和ART的优化仍然在很大程度上是互补的。

Sam对于潜在缺点的回答是正确的。您从完美的代码开始(希望如此),因此任何其他处理步骤都会带来一些努力和风险。如果大小和性能是您的主要目标,您可以禁用混淆(-dontobfuscate),因此堆栈跟踪仍然可读。

您可以在presentations的Droidcon和其他会议中找到有关ProGuard for Android的更多详细信息。

(我是ProGuard的开发者)