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

ProGuard混淆含oshi依赖的Maven胖Jar报UnsatisfiedLinkError如何解决

问题根源

UnsatisfiedLinkError是因为原生方法绑定的Java类/方法签名被ProGuard混淆后,和原生库的导出符号不匹配。你当前的保留规则只覆盖了oshi自身的部分代码,但oshi底层依赖的JNA(Java原生访问)库的类被混淆,报错栈中的com.sun.a.H就是原本com.sun.jna包下的类被混淆重命名后的结果,导致原生方法找不到对应的Java入口。

修复步骤

  • 首先添加JNA相关包的全量保留规则,JNA类和原生方法强绑定,禁止混淆:
# 保留JNA核心及平台包所有类、方法、字段
-keep class com.sun.jna.** { *; }
-keep class com.sun.jna.platform.** { *; }
# 全局保留所有native方法不被重命名
-keepclasseswithmembernames class * {
    native <methods>;
}
  • 补充保留JNA用到的系统原生库资源,防止被ProGuard压缩删除:
-keepresourcefiles **/*.dll
-keepresourcefiles **/*.so
-keepresourcefiles **/*.dylib
  • 替换你原有的oshi部分保留规则为全量保留,避免遗漏oshi内部非公开的调用类:
-keep class oshi.** { *; }

验证逻辑

重新打包后如果类名没有被混淆,报错栈里应该会显示com.sun.jna相关的类名而非com.sun.a这类混淆后的短命名,此时原生方法可以正常匹配到对应入口,错误即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 12:06:05