我正在尝试为我的Android项目设置proguard。我们在代码中使用了一些netty库,我想使用Proguard来完全删除我知道不使用的代码片段。
有没有办法告诉proguard假设一个包(或类)从未使用过,所以不应该包含在输出JAR中?请注意,我不谈论从混淆中排除某些代码(这是-keep
配置选项的作用),我说的是完全删除 a输出中的类。
编辑:正如下面的pst所建议的那样,我尝试使用-whyareyoukeeping
参数来确定proguard用来确定使用类的代码路径。它不会改变数十个警告的输出。
我还尝试按照pst的建议在-outjars
上使用文件过滤器。这也导致没有变化,因为算法仍假定将加载类,并且仅在“使用”类被错误地确定后才应用过滤器。
要明确:警告来自我们在Android项目中包含的第三方库中的类。我们不执行任何会加载这些类的代码,如果proguard找到了一个代码路径,它假设这些类被加载,我想明确地说它不使用这些类。
答案 0 :(得分:2)
在外展上指定过滤器的替代方法可以是指定对伤害的过滤器:
-injars in.jar(!unwanted/package/**)
这样,您就不会不必要地拖动此包引用的任何类,因为过滤是在任何处理之前进行的。
ProGuard现在会警告缺少的课程,所以你必须指明它没问题:
-dontwarn unwanted.package.**
您应该小心这些选项,因为抑制警告并不一定会使问题消失。正如pst所写,如果你过滤掉实际需要的类,你将获得NoClassDefFoundsErrors。