如何让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
相关产品推荐
相关产品推荐

