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

Android项目中使用htmlunit.jar时出现ProGuard问题

解决HtmlUnit 2.15 + Android ProGuard 签名APK报错问题

我之前在项目里集成旧版HtmlUnit的时候也踩过这个坑,你遇到的Can't find common super class错误,本质是ProGuard在混淆过程中,无法解析HtmlUnit里ActiveX相关类的特殊继承结构——尤其是com.gargoylesoftware.htmlunit.activex.javascript.msxml.MSXMLScriptable和Java核心类java.lang.Class的超类匹配逻辑被混淆破坏了。

给你几个可行的解决方案,按优先级推荐:

方案1:添加HtmlUnit专属的ProGuard保留规则

因为HtmlUnit大量依赖动态反射、JavaScript引擎交互以及内部类的动态加载,默认的ProGuard混淆会直接破坏这些逻辑。直接保留所有HtmlUnit相关类是最稳妥的方式,在你的proguard-rules.pro里添加:

# 保留HtmlUnit所有类及成员,避免混淆破坏内部逻辑
-keep class com.gargoylesoftware.htmlunit.** { *; }
-keepclassmembers class com.gargoylesoftware.htmlunit.** { *; }

# 额外保留JavaScript交互相关的接口,确保动态调用正常
-keep interface com.gargoylesoftware.htmlunit.javascript.** { *; }

添加完成后重新生成签名APK,这个规则基本能解决90%以上HtmlUnit和ProGuard的冲突问题。

方案2:精细保留报错相关类(适合不想太宽泛的场景)

如果你担心保留所有HtmlUnit类会增加APK体积,可以只针对报错的MSXML相关类和必要依赖添加规则:

# 保留ActiveX MSXML相关类,解决超类找不到的问题
-keep class com.gargoylesoftware.htmlunit.activex.javascript.msxml.** { *; }
# 保留HtmlUnit JavaScript宿主类,确保继承链完整
-keep class com.gargoylesoftware.htmlunit.javascript.host.** { *; }
# 确保Java核心Class类不被误处理
-keep class java.lang.Class { *; }

不过这种方式需要注意HtmlUnit内部的依赖关联,容易遗漏其他类导致新的混淆错误,所以更推荐方案1。

方案3:升级HtmlUnit版本(长期最优解)

你用的2.15是2015年的旧版本,对Android的兼容性和ProGuard的适配都比较差。如果项目允许的话,建议升级到最新的HtmlUnit版本(比如2.70+),新版本不仅修复了很多旧的兼容性问题,还对Android环境做了优化,ProGuard规则也更友好,能从根源上避免这类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 07:04:27