ProGuard 是不是支持 Java 11?

Posted

技术标签:

【中文标题】ProGuard 是不是支持 Java 11?【英文标题】:Does ProGuard support Java 11?ProGuard 是否支持 Java 11? 【发布时间】:2019-04-27 22:50:11 【问题描述】:

我尝试使用 Proguard (6.1.0beta1) 但得到了

(Unsupported version number [55.0] (maximum 54.0, Java 10)))

是否有可以使用 Java 11 进行管理的 ProGuard 替代品?

【问题讨论】:

只是好奇:你为什么要这么做? 你可以为 Java 10 编译你的代码吗?你真的在使用 Java 11 的特性吗? 提示:尝试查看发布信。此类工具通常会准确告诉您它们支持的 Java 版本。 当然:询问工具建议会使您的问题偏离主题。所以最好从你的问题中删除这部分。 异常已经告诉你它不被支持,那为什么还要发布这个问题呢? 【参考方案1】:

作为Karol Dowbecki's answer 的后续:ProGuard 6.1.0 beta2(或更新版本)支持 Java 10、11 和 12。请参阅 #188 Support Java 11


请注意,由于引入了模块系统,您需要将 libaryjars 更改为 Java 9 或更高版本。这是我Gradle Kotlin build script的部分:

if (JavaVersion.current().isJava9Compatible) 
    libraryjars(System.getProperty("java.home") + "/jmods")
 else 
    libraryjars(System.getProperty("java.home") + "/lib/rt.jar")

【讨论】:

由于模块系统,我在使 proguard 兼容时遇到问题。 ***.com/questions/55609008/…。我究竟在哪里对 build.gradle 文件进行了适当的更改来解决这个问题,我应该更改/添加什么“? 根据 ProGuard 问题 #190,6.1.0 beta 2 似乎仍然缺乏对 Java 12 的支持。在这里链接我的评论:sourceforge.net/p/proguard/feature-requests/190/?limit=25#81a0。源代码中根本没有提到 Java 12。【参考方案2】:

Java 11 引入了对字节码和类文件格式的更改:

JEP 181: Nest-Based Access Control JEP 309: Dynamic Class-File Constants

由于上述原因,您目前不太可能找到有效的代码混淆器。希望 ProGuard 将很快更新(请参阅为 ProGuard 6.1 计划的#188 Support Java 11)。

【讨论】:

我建议为 Java 10 编译。+1 看来我必须这样做。 您可以做的另一件事是签订支持合同 - guardsquare.com/en/support。这将帮助他们找到资源以将新功能添加到您首选的混淆器中……更快。 (免责声明:我与 GuardSquare 或 ProGuard 产品没有任何关系或经济利益。)

以上是关于ProGuard 是不是支持 Java 11?的主要内容,如果未能解决你的问题,请参考以下文章

使用 AndroidX 时,proguard-android-optimize.txt 中的“@Keep 支持注释”规则是不是仍然适用?

proguard - AppCompat 不支持 proguard/minify 后的当前主题功能

ProGuard 让 Gson 返回 LinkedTreeMap 而不是我的类型

Android:Java:Proguard:如何:验证我的 jar(不同的 jar 项目)/apk 是不是已成功处理? (我正在考虑对其进行逆向工程)

“Java.exe”以代码 1 退出(Proguard 问题)

如果源没有更改,Proguard 是不是保证提供相同的映射?