为什么普通 jar 文件压缩到 76% 但在 ProGuard 压缩和混淆之后却压缩到 102% ?! 如何修复?

为什么普通 jar 文件压缩到 76% 但在 ProGuard 压缩和混淆之后却压缩到 102% ?! 如何修复?

我有一个 392 MB 大小的 jar 文件。我又复制了一份,因此现在我有了同一个 jar 文件的两个副本。

对于其中一个我使用了7-zip压缩它。它被压缩到原始大小的 76%,即 298 MB

对于另一个;我首先使用混淆器压缩并混淆它。压缩后,它的大小下降到 348 MB。之后我用 7-zip 压缩它。压缩后为102%缩小后的大小为 355 MB!!!

出了什么问题?
如何修复?

答案1

通过用近乎随机的名称替换函数名称,然后更改函数的调用模式并预压缩文件(“缩小”),您可以有效地删除压缩算法可以看到并用于进一步压缩文件的所有重复块。

如果数据流中没有重复块,压缩算法就无法删除重复块,但您看到文件大小增加的原因是压缩方法有其自身的开销,它会将其放入输出文件中。压缩器将有一个在文件中重复的“短语”字典,然后压缩文件本质上是对该字典的查找列表,但如果文件中没有重复项,字典将成为原始文件的副本,查找仍然存在,每个查找仅指向字典中的一个项目。

这意味着对于已压缩的文件,输出文件不可能小于原始文件。您最终将始终存储整个文件以及一个查找表,该查找表告诉解压缩算法如何重建原始文件。

相关内容