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 是不是已成功处理? (我正在考虑对其进行逆向工程)