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

Java 如何以独立于操作系统的方式在Proguard配置中包含rt.jar/classes.jar?,java,android,proguard,Java,Android,Proguard,如Proguard所述: 在MacOS X中,运行时类可能位于与大多数其他平台不同的位置。然后必须调整配置,将路径/lib/rt.jar替换为/./Classes/Classes.jar 因此,例如,在非Mac环境中,您的Proguard配置中可能有以下内容: -libraryjars <java.home>/lib/rt.jar 但对于Mac环境,您可以指向classes.jar 如果这只是在Mac上开发的话,这是很好的,但是如果这段代码被检查到版本控制中,并且由多个OS上的开发

如Proguard所述:

在MacOS X中,运行时类可能位于与大多数其他平台不同的位置。然后必须调整配置,将路径/lib/rt.jar替换为/./Classes/Classes.jar

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

-libraryjars <java.home>/lib/rt.jar
但对于Mac环境,您可以指向classes.jar

如果这只是在Mac上开发的话,这是很好的,但是如果这段代码被检查到版本控制中,并且由多个OS上的开发人员共享,并且在运行不同OS的构建服务器上共享,那么它需要更灵活


是否有一种方法可以在Proguard中配置此功能,使其无论在什么操作系统上运行都能正常工作,而无需代码用户执行?

您可以根据环境定义一个系统变量并使用该变量:

-libraryjars <runtime.jar>
但是,如果您正在为Android开发:

您不应该参考rt.jar或classes.jar,因为它们包含许多Android运行时中不存在的java运行时类。 您不应该指定-libraryjars,因为Ant/Eclipse/Gradle构建过程已经自动为您指定了所有必要的-injar、-outjars和-libraryjars。

如果您看到有关缺少java运行时类的警告,则应该考虑一个选项,如-DOWTWARNJavax。请参阅ProGuard手册>故障排除>