在Proguard中,-libraryjars的目的是什么?

5
-libraryjars  <java.home>/lib/rt.jar

在Proguard文档中提到,使用-libraryjars选项添加项目中的jar文件。但我已将库jar包添加到libs文件夹中,从未使用过该选项。这些jar文件中的文件总是与其他代码一起混淆。我从未更改过Proguard默认设置,唯一需要做的是通过使用-keep命令来移除某些类的修改以避免错误。这些类与序列化或GSON库等问题有关。以下是一些示例,说明如何使用-keep命令从混淆过程中移除类。
-keep class sun.misc.Unsafe { *; }

-keep class com.google.gson.stream.** { *; }

-keep class com.myproject.testproject.MainActivity$TestObject { *; }

相比之下,我不理解示例代码中 `-libraryjars` 行的目的。即使不使用此行,在 Android 项目的 libs 文件夹中添加的所有 jar 包都可以轻松混淆处理,所以这个行有何用处呢?

4
有两种不同类型的库。1) 应用程序运行所需的库,您希望将其与应用程序"捆绑"和混淆。2) 应用程序所需的库,您不想混淆和"捆绑"。 -libraryjars 处理第二种情况。必须始终包括指向 Java 运行时路径的 -libraryjars,因为它是运行代码所必需的。其他库可能存在许可限制,这意味着您不能将其捆绑和混淆,或者可能由框架在运行时提供 - 例如 Servlet API。 - Boris the Spider
谢谢你的解释,现在很清楚了。 - Kevik
你确定你今天关于这个主题的两个问题不是重复的吗? - Chris Stratton
1个回答

4

您可以在ProGuard手册 > 介绍中找到它们的目的解释。

-injars/-libraryjars/-outjars选项指定了ProGuard的输入文件和输出文件。Android构建过程已经为您指定了必要的选项,因此您不必在配置文件中重复它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接