将proguard应用于Java库项目

时间:2016-01-15 21:30:03

标签: java proguard

我有一个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。

感谢。

1 个答案:

答案 0 :(得分:1)

执行以下操作之一:

  1. 使用缩小版的guava作为单独的maven工件,发布它,并让你的lib依赖于它,就像任何其他依赖
  2. 不要缩小库并使用multidex构建 - 这就是 解决65K方法限制的方法 http://developer.android.com/tools/building/multidex.html
  3. 无论如何,为了便于配置,你不应该在你的库中使用progruard,原因很简单:用户无论如何都必须为其项目添加依赖。如果在某些情况下用户会开始使用ClassNotFound异常,因为你已经截断了一些你不期望它可以使用的代码,该怎么办?

    如果某人正在为Android编程,他迟早会进入ProGuard,我认为越快越好。

    为了便于配置,我宁愿在文档中建议,如果用户想要避免65k限制,因为你的库已经超过它,他可以在提供的示例配置中使用proguard。