我正在编写一个applet,它使用~10个外部库。他们一起占用超过2兆字节。在一些库中,我们只使用1-2个类,因此可以安全地删除许多其他类。那么问题是如何从jar库中删除未使用的类?
许多其他问题与Proguard有关。但它没有处理库(或者我做错了),也破坏了使用反射的代码部分。
答案 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.就如何识别这些课程和一些警告给出了一个很好的建议。我想补充一点,你可能也违反了许可证......