对于较早的JDK版本,我在R8配置中包含了rt.jar
,
-libraryjars <java.home>/lib/rt.jar
为了满足非Android特定的各种Java库的要求(注意,这并不意味着整个rt.jar
将包含在应用程序中,这只是一种避免R8优化剥离重要Java SE代码的实用方法,而无需逐个配置所有保留白名单)
对于8以上的JDK,rt.jar
不再可用,并且已被jmods
取代,搜索似乎是proguart语法,以包括与rt.jar
等效的jmods替代项
-libraryjars <java.home>/jmods/java.base.jmod(!**.jar,!module-info.class)
所以我已经尝试过了,但不幸的是,使用R8时,我得到了这个错误:
Unexpected input type. Only archive types are supported, e.g., .jar, .zip, etc.
正确的方法是什么?
1条答案
按热度按时间cetgtptt1#
当R8 * 不 * 用于Android项目(其中
android.jar
是运行时库)时,需要Java运行时库,该库在Java 8之前位于rt.jar
中。对于更高版本的JDK,文件系统提供程序包含在$JAVA_HOME/lib/jrt-fs.jar
中。R8支持通过将JAVA_HOME
目录作为库路径传递给R8来使用该库,因此:将适用于所有JDK版本。如果
JAVA_HOME
具有使用的rt.jar
,则使用文件系统提供程序查找运行时库。请参阅此处处理此问题的代码。注意,当在配置文件中使用
-libraryjars
时,此操作不起作用,仅当--lib
参数直接指向R8时。在该文件上打开issue 260213385。还要注意,当加载文件系统提供程序时,它将始终公开 running JVM的运行时,因此这样做
如果
JAVA_HOME_2
用于JDK-9或更高版本,您仍将看到JAVA_HOME_1
的运行时。