java - 如何以独立于操作系统的方式将 rt.jar/classes.jar 包含在 Proguard 配置中?

标签 java android proguard

如 Proguard 的 troubleshooting page 中所述:

In MacOS X, the run-time classes may be in a different place than on most other platforms. You'll then have to adapt your configuration, replacing the path <java.home>/lib/rt.jar by <java.home>/../Classes/classes.jar.

例如,在非 Mac 环境中,您的 Proguard 配置中可能有以下内容:

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

但对于 Mac 环境,您将指向 classes.jar .

<小时/>

如果仅在 Mac 上开发,这很好,但如果将此代码 checkin 版本控制并由多个操作系统以及运行不同操作系统的构建服务器上的开发人员共享,则它需要更加灵活。

有没有一种方法可以在 Proguard 中配置它,使其无论运行在什么操作系统上都可以工作,而不需要代码的用户 make filesystem changes

最佳答案

您可以定义一个取决于环境的系统变量并使用它:

-libraryjars <runtime.jar>

但是,如果您正在针对 Android 进行开发:

  • 您不应引用 rt.jarclasses.jar,因为它们包含许多 Android 运行时中不存在的 Java 运行时类。
  • 您不应指定 -libraryjars,因为 Ant/Eclipse/Gradle 构建过程已自动指定所有必需的 -injars-outjars ,以及 -libraryjars 为您服务。

如果您看到有关缺少 Java 运行时类的警告,则应考虑使用 -dontwarn javax.** 等选项。请参阅 ProGuard 手册 > 故障排除 > Warning: can't find referenced class .

关于java - 如何以独立于操作系统的方式将 rt.jar/classes.jar 包含在 Proguard 配置中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19052548/

相关文章:

Android simplexml.jar混淆问题

java - Proguard - 有什么方法可以忽略外部库中不兼容的(由于 Java 字节码版本)包?

JavaFX - LineChart水平标记问题

java - 检查 Java 中的 MySQL DB 中是否存在值?

带有 RemoteViews 的 Android 自定义通知布局

android - Titanium Appcelerator 安卓模块 : How to create a proxy?

java - 数据库迁移

java - 如何使用 iText7 将 SVG 添加到 PDF

android - 为什么无法将我的 Android REST 客户端连接到我的 REST 服务?

Android ProGuard 无法在 IntelliJ 11.1 中访问 jarfile ..\lib\proguard.jar