android - 我怎样才能告诉 proguard 假设一个包没有被使用?

标签 android ant build proguard

我正在尝试为我的 Android 项目设置混淆器。我们在代码中使用了 netty 库的一些 fragment ,我想使用 Proguard 完全删除我知道没有使用的代码 fragment 。

有没有什么方法可以告诉混淆器假设一个包(或类)从未被使用过,因此不应包含在输出 JAR 中?请注意,我不是在谈论从混淆中排除一些代码(这是-keep配置选项所做的),我在谈论完全删除 来自输出的类。

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

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

要清楚:警告来 self 们包含在我们的 Android 项目中的第 3 方库中的类。我们不执行任何将加载这些类的代码,如果混淆器找到它假定加载这些类的代码路径,我想明确地说它使用这些类。

最佳答案

在 outjars 上指定过滤器的替代方法是在 injars 上指定过滤器:

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

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

ProGuard 现在会警告缺少类,因此您必须指定它没问题:

-dontwarn unwanted.package.**

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

关于android - 我怎样才能告诉 proguard 假设一个包没有被使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7393247/

相关文章:

android - 在约束布局编辑 Pane 中,我的文本不仅水平居中而且垂直居中

java - libGDX ObjectOutputStream 写入失败并出现 FileNotFoundException

Android 作业调度程序不会在重启时保留

Ant: "Duplicated project name in import"带有导入的构建文件

android - 高效开发修改AOSP framework.jar

android - 使用URI查询MediaStore

java - 使用 build.xml 为项目中的特定包构建单独的 jar?

java - 从 Eclipse 启动时出现 NoClassDefFoundError,但在 Ant 中工作正常

angular - 将 MathJax 集成到 SystemJS 构建中

linux - 无法签署 RPM : RPM sign execution returned: '127'