2

我正在开发一个使用 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;

提前致谢。

4

1 回答 1

2

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

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

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

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

解决方案 1 (不推荐)

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

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

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

  4. 现在我们将重新生成 jar 文件。删除目录后,现在返回目录的根目录,您将在其中看到其他目录,例如 META-INF org utils

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

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

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

解决方案2:

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