【问题标题】:Apply proguard to a Java Library Project将 proguard 应用于 Java 库项目
【发布时间】:2016-01-15 21:30:02
【问题描述】:

我有一个 java 库项目,其中包含对 guava 库的依赖项。 Guava 的方法数接近 11k,我预计大多数用户来自 Android 社​​区。 Android上有一个limit count方法,就是65k...

但是我的库的总计数方法大约是 11.400,所以我的库的代码不到 200 行。

我能够使用 proguard 下载并缩小一个番石榴罐,将计数方法数量减少到 1k。但是现在项目需要包含对这个 shrank jar 的引用,而不是对托管 guava 的远程存储库的引用。 But any jar added to the project would be discard 由 maven 作为工件发布到任何远程存储库时,因此无法解析 guava 依赖项,应用程序客户端最终会崩溃。

Guava 本身 advices to not use proguard 如果您的“应用程序”实际上是一个库,则让您的库的用户处理这种情况,使用他们自己的 proguard 来缩小 guava。但我不喜欢这个想法,因为我想提供一个简单的配置解决方案。

据我所知,proguard 提供的输出是某种可执行文件(jar、apk 等),因此,如果我缩小自己的库,最终输出将是一个 jar,而这个 jar,再次,无法作为工件发布,因为它会被丢弃(我尝试了几次)。

有什么方法可以在我自己的 java 库项目中使用 proguard 并将生成的输出传递给构建链,以便作为远程存储库而不是 jar 发布?

顺便说一句,我正在使用 gradle 来构建我的项目,但在这一点上,我将转向一个可以解决问题的 maven。

谢谢。

【问题讨论】:

    标签: java proguard


    【解决方案1】:

    执行以下操作之一:

    1. 将 guava 的缩小版本用作单独的 maven 工件,发布它,并让您的 lib 像依赖任何其他依赖项一样依赖它
    2. 不要收缩库并使用 multidex 构建 - 这是 解决65K方法限制的方法 http://developer.android.com/tools/building/multidex.html

    无论如何,为了便于配置,您不应该在库中使用 progruard,原因很简单:用户无论如何都必须为其项目添加依赖项。如果在某些情况下用户将开始出现 ClassNotFound 异常,因为您截断了一些您不希望它可以使用的代码,该怎么办?

    如果有人正在为 Android 编程,他迟早会使用 ProGuard,我认为越早越好。

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

    【讨论】:

    • 这是我尝试完成但没有成功的第一种方法。因为如果我将这个缩小版的番石榴作为 jar 包,我该如何发布为 maven 工件?我没有找到任何关于它的信息,只是这个,它根本不起作用ufasoli.blogspot.com.es/2013/05/…
    • 这不是一件容易的事。您必须创建一个以 guava 作为依赖项的空项目并为其启用 Progruard。您可以构建它并发布为“MyShrankGuavaDep”。我建议不要那样做,并将库缩小到最终用户 - 也许他会在他的项目中使用 guava 并且 gradle/maven 不会再次导入它,因为它将作为依赖项导入到您的库中。如果没有,他可以使用proguard。
    • Maven 范围是不同的故事(参考你在评论中提供的链接)。简单地说:您必须构建一个使用 Proguard 来缩小其依赖项的项目,并将该项目用作您的库项目的依赖项。
    • 我已经试过了。确实有不同的方法,但都没有奏效。 github.com/VictorAlbertos/GuavaShrankRxCache。最后我总是有一个jar,我不知道如何将这个jar作为工件发布,即使在另一个完整的maven项目中也是如此。
    • 我必须承认我从来没有在 maven 中使用过 proguard(android 项目只能使用 gradle),你可能不得不使用某种其他的发布插件......但老实说,这些是边界我的知识和我将无法提供进一步的帮助:(唯一剩下的就是使用 2) 方法。另一方面,比我们更大的大脑可能想要实现这一目标,并得出结论“不推荐在 lib 项目上使用 proguard”。这对最终用户来说并没有太多开销,但正如您所见,这对您来说是一项艰巨的工作。所以这是有原因的。将 Progruard 留给 APK 的最终用户 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多