如何收缩外部java库?

时间:2012-06-25 15:37:31

标签: java jar proguard shrink

我正在编写一个applet,它使用~10个外部库。他们一起占用超过2兆字节。在一些库中,我们只使用1-2个类,因此可以安全地删除许多其他类。那么问题是如何从jar库中删除未使用的类?

许多其他问题与Proguard有关。但它没有处理库(或者我做错了),也破坏了使用反射的代码部分。

4 个答案:

答案 0 :(得分:1)

可以使用类似ClassDep的内容,它会静态识别您将使用哪些类。

然而,可以轻易地欺骗这个。想象一下你的一些代码包含:

Class.forName(className);

因此您可以动态构建类名并加载该类。像ClassDep这样的工具无法识别这些情况,因此您需要对收缩的罐子进行全面测试。

答案 1 :(得分:1)

您可以使用maven-shade-plugin并告诉它构建一个结合了代码和库的最小化jar文件。

答案 2 :(得分:1)

ProGuard可以将您的代码与库一起处理(使用-injars选项)。您仍然可以保留您不想处理的外部库(使用-libraryjars选项)。

任何自动收缩工具都会出现反射问题。 ProGuard识别一些基本反射,它允许您指定内部API的部分,为了反射应该保留这些部分。 ProGuard支持一些强大的配置,但根据库中的反射量,它可能仍然需要反复试验。

答案 3 :(得分:0)

您可以简单地“解压缩”JAR,只从每个类中获取所需的类,并将它们放在自定义存档中。 Brian A.就如何识别这些课程和一些警告给出了一个很好的建议。我想补充一点,你可能也违反了许可证......