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

开启Minify后Android中SAXParserFactory.newInstance()抛异常求助

解决思路

这个问题是因为开启Minify(混淆)后,XML解析相关的核心类被移除或混淆,导致SAXParserFactory.newInstance()通过服务发现机制找不到对应的实现类,抛出ClassNotFoundException。针对SDK 15环境,可按以下方案处理:

1. 调整ProGuard/R8混淆规则

在项目的proguard-rules.pro文件中添加以下规则,确保XML解析相关类不被混淆或移除:

# 保留XML解析核心API类
-keep class javax.xml.parsers.** { *; }
-keep class org.xml.sax.** { *; }
-keep class org.w3c.dom.** { *; }

# 保留Android SDK 15自带的XML解析实现类
-keep class com.android.org.xml.sax.** { *; }
-keep class org.apache.harmony.xml.** { *; }

# 保留服务发现所需的属性和类名
-keepattributes *Annotation*,EnclosingMethod,Signature
-keepnames class * implements javax.xml.parsers.SAXParserFactory

解释:SAXParserFactory通过Java的服务提供者接口(SPI)查找实现类,混淆会破坏类名和类结构,导致SPI无法定位到具体实现。以上规则强制保留相关类和必要元数据,避免服务发现失败。

2. 直接指定SAXParserFactory实现类

绕过SPI服务发现,直接指定SDK 15自带的实现类,修改代码如下:

SAXParserFactory factory = SAXParserFactory.newInstance("org.apache.harmony.xml.parsers.SAXParserFactoryImpl", null);

这种方式直接跳过动态查找过程,避免混淆导致的类定位问题,适用于固定目标SDK版本的场景。

3. 验证混淆包的完整性

混淆打包后,可通过以下方式确认问题是否解决:

  • 解压APK,查看classes.dex中是否存在org.apache.harmony.xml.parsers.SAXParserFactoryImpl等关键类
  • 在SDK 15真机或模拟器上安装测试,确认异常不再出现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:42:12