You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让ProGuard保留module-info并更新引用适配混淆包名兼容jlink?

解决ProGuard保留module-info并更新混淆后包名的问题

ProGuard默认会移除module-info类,使用keep class module-info强制保留后,确实会出现jlink报错"Package x.y.z not found in module"的问题——因为它不会自动更新类中引用的混淆后名称。以下是可行的解决办法:

  • 启用adaptclassstrings选项
    这个选项是ProGuard专门用来调整字符串形式的类名、包名引用的,包括module-info里的exports、requires等声明中的包名。只需在配置中添加:

    adaptclassstrings
    

    配合已有的keep class module-info规则,ProGuard就会自动将module-info里的原始包名替换为混淆后的新包名,解决jlink的报错。

  • 使用适配Java模块的ProGuard版本
    Java模块(Module System)是Java 9引入的特性,建议使用ProGuard 7.0及以上版本,这些版本对module-info的处理逻辑更完善,能更好地配合混淆规则完成包名更新。

  • 补充模块相关的混淆规则(按需)
    如果你的模块有特定的exports或opens声明,确保这些包的混淆规则是明确的。比如你需要混淆x.y.z包为a.b.c,ProGuard在启用adaptclassstrings后,会自动把module-info里的exports x.y.z;更新为exports a.b.c;,无需手动修改。

内容的提问来源于stack exchange,提问作者Lukas Hanacek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 05:00:31