如何防止 ProGuard 在输出 jar 中包含引用的库

Posted

技术标签:

【中文标题】如何防止 ProGuard 在输出 jar 中包含引用的库【英文标题】:How to prevent ProGuard from including referenced libraries in the output jar 【发布时间】:2014-06-02 00:36:41 【问题描述】:

我正在尝试使用 ProGuard 来混淆我的 android 库项目源代码。

我在我的项目中使用了一些库,一些作为 libs 文件夹中的 jars(例如 android-async-http-1.4.4.jar)和一个作为引用库项目 (google-play-services_lib)。

当我在没有 ProGuard 的情况下(使用 ant release)构建项目时,只有我编写的类被打包到创建的 jar 中。这就是我想要的,因为将使用我的库的 Android 应用程序可能已经在使用我正在使用的一些相同的库。

但是当我使用 ProGuard 构建项目时,我使用的库包含在输出 jar 中。我不知道为什么,我不想要这个。我认为使用 -libraryjars 命令添加这些 jar 会阻止它们包含在我的输出 jar 中,因为 ProGuard 文档很清楚,但它没有帮助。

-libraryjars 类路径

指定要处理的应用程序的库 jars(或 aars、wars、ears、zip、apks 或目录)。这些 jar 中的文件不会包含在输出 jar 中。

我可能没有正确使用它。有人知道我做错了什么(或者我还没有做什么)吗?

-libraryjars ./libs/android-async-http-1.4.4.jar
-libraryjars ./libs/AndroidIBeaconLibrary-0.7.5.jar
-libraryjars ../google-play-services_lib/libs/google-play-services.jar

【问题讨论】:

【参考方案1】:

我仍然不知道为什么引用的库包含在混淆的 jar 中,但是纠正与此相关的问题的简单解决方案是用 winrar 打开混淆的 jar 并删除我不想的类在那里...

【讨论】:

以上是关于如何防止 ProGuard 在输出 jar 中包含引用的库的主要内容,如果未能解决你的问题,请参考以下文章

如果在proguard中包含带有注释的字段,如何保持类的成员不受影响

Android - 如何比 proguard 更好地防止黑客攻击或逆向工程? [复制]

如何在 maven jar 构建过程中包含外部 jar?

如何在 JAR 中包含 ChromeDriver?

如何在 Maven 项目中包含本地 jar 文件 [重复]

如何在 Maven 生成的 jar 中包含特定文件夹?