我有一个java库项目,它包含对guava库的依赖。 Guava有近11k的方法,我希望大多数用户来自Android社区。在Android上有一个限制计数方法,它是65k ......
但我的图书馆的总计数方法大约是11.400,所以我的图书馆代码不到200行。
我能够使用proguard下载并缩小番石榴罐,将计数方法编号减少到1k。但是现在项目需要包含对这个缩小jar的引用,而不是对托管番石榴的远程存储库的引用。 maven在任何远程存储库中作为工件发布时But any jar added to the project would be discard,因此无法解析guava依赖关系,应用程序客户端最终会崩溃。
Guava本身advices to not use proguard如果你的“应用程序”实际上是一个库,并留给你的图书馆用户处理这种情况,使用自己的proguard来缩小番石榴。但我不喜欢这个想法,因为我想提供一个简单的配置解决方案。
据我所知,proguard提供的输出是某种可执行文件(jar,apk等),所以,如果我收缩了我自己的库,最后的输出将是一个jar,而这个jar又一次,无法作为工件发布,因为它会被丢弃(我试了好几次)。
有没有办法在我自己的java库项目中使用proguard并将结果输出传递给构建链,以便作为远程存储库发布,而不是作为jar发布?
我正在使用gradle来构建我的项目,但是在这一点上,我将转向一个可以解决问题的maven。
感谢。
答案 0 :(得分:1)
执行以下操作之一:
无论如何,为了便于配置,你不应该在你的库中使用progruard,原因很简单:用户无论如何都必须为其项目添加依赖。如果在某些情况下用户会开始使用ClassNotFound异常,因为你已经截断了一些你不期望它可以使用的代码,该怎么办?
如果某人正在为Android编程,他迟早会进入ProGuard,我认为越快越好。
为了便于配置,我宁愿在文档中建议,如果用户想要避免65k限制,因为你的库已经超过它,他可以在提供的示例配置中使用proguard。