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

Java me 使用Bouncy Castle库会导致输出.jar文件大小的大幅增加,java-me,jar,proguard,bouncycastle,filesize,Java Me,Jar,Proguard,Bouncycastle,Filesize,我正在从事一个利用Bouncy Castle J2ME库的Java ME/J2ME项目。然而,当我将它添加到我的项目中时,我注意到生成的.jar文件大小增加了40倍(50kB比2000kB)。除了将ProGuard的模糊器设置设置为9级(最大值),还有其他方法可以将文件大小的增加降至最低吗 我只使用了实际类中的几个库,即: import org.bouncycastle.util.encoders.Hex; import org.bouncycastle.crypto.Digest; impor

我正在从事一个利用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;

提前谢谢。

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

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

总之,我刚刚下载了bouncy castle jar文件,可以看到它完全是由类文件组成的,因此没有额外的文件,我们可以删除并删除这些文件来减少生成的jar文件

现在,如果你真的想减少,那么继续读下去,我将给出两种解决方案,它们都是有风险的:

解决方案1(不推荐)

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

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

  • 现在删除其他目录,即“asn1”、“bcpg”。在这个阶段,我不会成为一个屠夫,删除一切,但会删除一对夫妇,然后回来删除其他人,如果它起作用

  • 现在我们将重新生成jar文件。删除目录后,现在返回目录的根目录,在那里可以看到其他目录,如 META-INF 组织机构 乌提尔斯

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

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

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

  • 下载您正在使用的bouncycastle jar文件的源代码
  • 您必须从项目中删除jar文件
  • 将源代码包含到项目中。构建项目,看看是否没有任何编译错误。在这个阶段你必须确定 您没有使用原始jar文件,只使用代码
  • 现在开始删除包含您不需要的代码的包。继续重建项目,使其不会出现编译错误, 如果是这样的话,那么你就不想深入研究这个包,继续删除其他包了
  • 一旦完成这项工作,就构建项目并生成jar文件
  • 通过这种方式,Proguard将混淆bouncy castle的代码,并且由于删除了大部分不需要的代码,您应该会得到一个实质性的解决方案 结果jar文件中的减少

  • 添加了proguard标记,因为这应该是proguard的正确选项的问题,以将其减少到您正在使用的类。感谢您的建议,user_CC。我尝试了解决方案2,但连锁反应很难控制。我曾经尝试过删除那些不被使用的类,而只是让那些被使用的类抛出错误(就像它们自己使用它们一样!)。看起来代码混淆是目前的做法。非常感谢。使用代码而不是库,肯定会让ProGuard混淆库代码的大小。它是否减少或进一步增加了大小?使用library.jar与使用其类(启用和禁用混淆)之间的大小似乎没有区别。当ProGuard的级别设置为max(9)时,它似乎只对output.jar大小产生影响,否则不会有任何变化。这正常吗?