我正在尝试为我的 Android 项目设置 proguard。我们在代码中使用了 Netty 库的一些片段,我想使用 Proguard 来完全删除我知道未使用的代码片段。
有没有什么方法可以告诉 proguard 假设某个包(或类)从未使用过,因此不应包含在输出 JAR 中?请注意,我是not谈论从混淆中排除某些代码(这就是-keep
配置选项做),我完全在谈论removing输出中的一个类。
Edit:正如下面 pst 所建议的,我尝试使用-whyareyoukeeping
参数来确定 proguard 用于确定使用的类的代码路径。它不会改变数十个警告的输出。
我还尝试使用文件过滤器-outjars
正如 pst 所建议的。这也没有导致任何变化,因为算法仍然假设将加载该类,并且仅在错误确定“已使用”类之后才应用过滤器。
需要明确的是:警告来自我们包含在 Android 项目中的第三方库中的类。我们不执行任何将加载这些类的代码,并且如果 proguard 找到一个代码路径,它确实假设这些类已加载,我想明确地说它确实加载了not使用这些类。
在 outjar 上指定过滤器的另一种方法是在 injar 上指定过滤器:
-injars in.jar(!unwanted/package/**)
这样,您就不会不必要地拖入此包引用的任何类,因为过滤是在任何处理之前发生的。
ProGuard 现在会警告缺少的类,因此您必须指定它是可以的:
-dontwarn unwanted.package.**
您应该小心使用这些选项,因为抑制警告并不一定能让问题消失。正如 pst 所写,如果您过滤掉实际需要的类,您将得到 NoClassDefFoundsErrors。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)