我如何告诉proguard假设没有使用包?

时间:2011-09-12 19:58:33

标签: android ant build proguard

我正在尝试为我的Android项目设置proguard。我们在代码中使用了一些netty库,我想使用Proguard来完全删除我知道不使用的代码片段。

有没有办法告诉proguard假设一个包(或类)从未使用过,所以不应该包含在输出JAR中?请注意,我谈论从混淆中排除某些代码(这是-keep配置选项的作用),我说的是完全删除 a输出中的类。

编辑:正如下面的pst所建议的那样,我尝试使用-whyareyoukeeping参数来确定proguard用来确定使用类的代码路径。它不会改变数十个警告的输出。

我还尝试按照pst的建议在-outjars上使用文件过滤器。这也导致没有变化,因为算法仍假定将加载类,并且仅在“使用”类被错误地确定后才应用过滤器。

要明确:警告来自我们在Android项目中包含的第三方库中的类。我们不执行任何会加载这些类的代码,如果proguard找到了一个代码路径,它假设这些类被加载,我想明确地说它使用这些类。

1 个答案:

答案 0 :(得分:2)

在外展上指定过滤器的替代方法可以是指定对伤害的过滤器:

-injars in.jar(!unwanted/package/**)

这样,您就不会不必要地拖动此包引用的任何类,因为过滤是在任何处理之前进行的。

ProGuard现在会警告缺少的课程,所以你必须指明它没问题:

-dontwarn unwanted.package.**

您应该小心这些选项,因为抑制警告并不一定会使问题消失。正如pst所写,如果你过滤掉实际需要的类,你将获得NoClassDefFoundsErrors。