使用 Bouncy Castle 库会导致输出 .jar 文件大小大幅增加

Posted

技术标签:

【中文标题】使用 Bouncy Castle 库会导致输出 .jar 文件大小大幅增加【英文标题】:Using Bouncy Castle library causes massive increase in output .jar file size 【发布时间】:2013-02-05 13:23:18 【问题描述】:

我正在开发一个使用 Bouncy Castle J2ME 库的 Java ME/J2ME 项目。然而,当将它添加到我的项目时,我注意到生成的 .jar 文件大小增加了 40 倍(50kB 与 2000kB)。除了将 ProGuard 的混淆器设置设置为 9 级(最大)之外,还有其他方法可以最大程度地减少文件大小的增加吗?

我只使用了几个库的实际类,即:

import org.bouncycastle.util.encoders.Hex;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.*;
import org.bouncycastle.crypto.digests.SHA256Digest;

提前致谢。

【问题讨论】:

添加了 proguard 标签,因为它应该只是一个正确的 proguard 选项的问题,以将其减少到只有您正在使用的类。 【参考方案1】:

现在这是一个非常棘手的问题!

在此之前,请您解压您的 jar 文件,看看 Proguard 是否混淆了 BouncyCastle 的类文件?由于您已将 bouncycastle jar 文件作为库包含并且其中有类文件,所以我假设 Proguard 没有混淆这些占用大量空间的类文件。

无论如何,我刚刚下载了 bouncy castle jar 文件,可以看到它完全由类文件组成,因此没有额外的文件我们可以删除并删除以减少生成的 jar 文件。

现在,如果您真的想减少,请继续阅读,我将提出两种解决方案,它们都有风险:

解决方案 1(不推荐)

    这很简单,但我不建议这样做,它可能会导致运行时异常或错误: 解压缩 bouncycastle jar 文件。然后导航到目录 src\org\bouncycastle 正如您所提到的,您仅使用以下这些软件包 org.bouncycastle.util.* org.bouncycastle.crypto.*

    现在我假设这两个包中的源代码不依赖于其他包中的源代码/类文件。

    现在删除其他目录,即“asn1”、“bcpg”。在这个阶段,我不会成为屠夫并删除所有内容,而是会删除一对,然后如果有效,然后再回来删除其他人。

    现在我们将重新生成 jar 文件。删除目录后,现在返回目录的根目录,您将在其中看到其他目录,例如 元信息 组织 实用工具

这是您需要正确执行此操作的重要步骤,否则 jar 文件将无法正常工作。选择根目录下的所有目录,然后 然后右键单击-> 发送到 zip

创建 zip 文件后,将其重命名为 *.jar 而不是 *.zip

    jar 文件的大小会减小,现在将这个 jar 文件包含在您的项目中。看看它是否编译并执行。然后检查 如果它在运行时正常工作,您的功能。如果一切顺利,那么你就完成了。 现在您可以重复上述步骤以删除更多目录以减小 jar 文件大小。

解决方案 2:

    下载您正在使用的 bouncycastle jar 文件的源代码。 您必须从项目中删除 jar 文件。 将源代码包含到项目中。构建项目,看看你是否没有得到任何编译错误。在这个阶段你必须确定 您没有使用原始 jar 文件,而仅使用代码。 现在开始删除包含您不需要的代码的包。继续重建项目,它不会出现编译错误, 如果确实如此,那么您不想删除该包并继续删除其他包。 完成此操作后,构建项目并生成 jar 文件。 通过这种方式,Proguard 将混淆充气城堡的代码,并且由于删除了大部分不需要的代码,您应该会获得大量 减少生成的 jar 文件。

【讨论】:

感谢您的建议,user_CC。我尝试了解决方案 2,但连锁效应很难管理。我已经尝试删除那些不被使用的类,这些类只用于那些被使用的类抛出错误(因为他们自己使用了它们!)。看起来代码混淆是目前要走的路。非常感谢。 使用代码而不是库,肯定会让 ProGuard 混淆库代码减小大小..它是减小还是进一步增加大小? 使用库 .jar 与使用它的类(打开和关闭混淆)之间的大小似乎没有区别。 ProGuard 似乎仅在其级别设置为 max (9) 时对输出 .jar 大小产生影响,否则没有任何变化。这正常吗?

以上是关于使用 Bouncy Castle 库会导致输出 .jar 文件大小大幅增加的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Bouncy Castle Crypto API来加密和解密数据

在 C# 中使用 Bouncy Castle 加密/解密

Bouncy Castle Java PGP加解密

markdown CSS 3D Bouncy Castle

仅使用 Bouncy Castle 读取 PEM RSA 公钥

Bouncy Castle PGP 解密问题