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

Flutter Release模式调用Smack框架触发XmlPullParserException异常

问题场景

Flutter应用调用Java框架Smack时,debug和profile编译模式运行完全正常,但切换到release模式时触发异常,推测问题与构建流程细节相关。

关键报错信息

Caused by: org.xmlpull.v1.XmlPullParserException: unsupported feature: XMLPULL FAQ (position:START_DOCUMENT null@1:1)
at org.kxml2.io.KXmlParser.setFeature(KXmlParser.java:2102)

完整调用栈

java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:353)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.util.ServiceConfigurationError: h8.e: Provider i8.b could not be instantiated
at java.util.ServiceLoader.fail(ServiceLoader.java:233)
at java.util.ServiceLoader.-wrap1(Unknown Source:0)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:392)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:416)
at java.util.ServiceLoader$1.next(ServiceLoader.java:494)
at h8.a.a(Unknown Source:17)
at h8.a.b(Unknown Source:0)
at d8.a0.d(Unknown Source:7)
at a7.z.d(Unknown Source:0)
at a7.z.c(Unknown Source:6)
at a7.z.(Unknown Source:97)
at a7.u.b(Unknown Source:0)
at a7.u.a(Unknown Source:7)
at a7.k.(Unknown Source:26)
at p4.b.a(Unknown Source:5)
at p4.b.doInBackground(Unknown Source:2)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.ExceptionInInitializerError
at java.lang.Class.newInstance(Native Method)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:388)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:416)
at java.util.ServiceLoader$1.next(ServiceLoader.java:494)
at h8.a.a(Unknown Source:17)
at h8.a.b(Unknown Source:0)
at d8.a0.d(Unknown Source:7)
at a7.z.d(Unknown Source:0)
at a7.z.c(Unknown Source:6)
at a7.z.(Unknown Source:97)
at a7.u.b(Unknown Source:0)
at a7.u.a(Unknown Source:7)
at a7.k.(Unknown Source:26)
at p4.b.a(Unknown Source:5)
at p4.b.doInBackground(Unknown Source:2)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Caused by: org.xmlpull.v1.XmlPullParserException: unsupported feature: XMLPULL FAQ (position:START_DOCUMENT null@1:1)
at org.kxml2.io.KXmlParser.setFeature(KXmlParser.java:2102)
at i8.b.(Unknown Source:25)
at java.lang.Class.newInstance(Native Method)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:388)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:416)
at java.util.ServiceLoader$1.next(ServiceLoader.java:494)
at h8.a.a(Unknown Source:17)
at h8.a.b(Unknown Source:0)
at d8.a0.d(Unknown Source:7)
at a7.z.d(Unknown Source:0)
at a7.z.c(Unknown Source:6)
at a7.z.(Unknown Source:97)
at a7.u.b(Unknown Source:0)
at a7.u.a(Unknown Source:7)
at a7.k.(Unknown Source:26)
at p4.b.a(Unknown Source:5)
at p4.b.doInBackground(Unknown Source:2)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)

解决思路

  • 修复ProGuard/R8混淆问题:Release模式默认开启代码混淆,可能误删了Smack依赖的XML解析相关类。在android/app/proguard-rules.pro中添加以下规则:
    -keep class org.xmlpull.v1.** { *; }
    -keep class org.kxml2.** { *; }
    -keep class org.jivesoftware.smack.** { *; }
    -keep class org.jivesoftware.smackx.** { *; }
    
  • 排查依赖冲突:执行./gradlew app:dependencies查看依赖树,检查是否存在多个XML Pull Parser版本,排除冲突版本,确保仅保留Smack兼容的kxml2实现。
  • 保留ServiceLoader配置文件:Smack通过ServiceLoader加载组件,Release构建可能移除META-INF/services下的配置。在android/app/build.gradle的android块中添加:
    packagingOptions {
        pickFirst 'META-INF/services/org.xmlpull.v1.XmlPullParserFactory'
        merge 'META-INF/services/**'
    }
    
  • 手动指定XmlPullParser实现:在Smack初始化前,在Flutter的Android原生代码中手动设置解析器工厂:
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance("org.kxml2.io.KXmlParser", null);
    factory.setNamespaceAware(true);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:05:24