APK缺失类导致Android模拟器运行崩溃问题求助
Android模拟器运行时类缺失崩溃问题(目标SDK 32)
问题描述
APK可正常构建,应用启动后运行到某阶段崩溃,抛出类缺失异常。根因提示Didn't find class "org.w3c.dom.events.EventTarget" on path,该类属于JRE类,非外部依赖。当前目标Android SDK版本为32,需先解决此问题再考虑升级。
崩溃日志
05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): An error occurred while executing a task on the OperationQueue. 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/xerces/dom/CoreDocumentImpl; 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.setFeature(Unknown Source:126) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at c.e.a.f.d.j.x(:42) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at com.xxx.scratch.c.p.b.F(:200) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at com.xxx.scratch.c.p.b$c.run(:126) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at com.xxx.scratch.c.s.a$a.run(:34) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:487) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.util.concurrent.FutureTask.run(FutureTask.java:264) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.Thread.run(Thread.java:1012) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): Caused by: java.lang.ClassNotFoundException: org.apache.xerces.dom.CoreDocumentImpl 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.VMClassLoader.findLoadedClass(Native Method) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.loadClass(ClassLoader.java:363) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.loadClass(ClassLoader.java:312) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): ... 10 more 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/xerces/dom/ParentNode; 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): ... 10 more 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): Caused by: java.lang.ClassNotFoundException: org.apache.xerces.dom.ParentNode 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.VMClassLoader.findLoadedClass(Native Method) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.loadClass(ClassLoader.java:363) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.loadClass(ClassLoader.java:312) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): ... 10 more 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/xerces/dom/ChildNode; 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): ... 10 more 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): Caused by: java.lang.ClassNotFoundException: org.apache.xerces.dom.ChildNode 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.VMClassLoader.findLoadedClass(Native Method) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.loadClass(ClassLoader.java:363) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.loadClass(ClassLoader.java:312) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): ... 10 more 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/xerces/dom/NodeImpl; 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): ... 10 more 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): Caused by: java.lang.ClassNotFoundException: org.apache.xerces.dom.NodeImpl 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.VMClassLoader.findLoadedClass(Native Method) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.loadClass(ClassLoader.java:363) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.loadClass(ClassLoader.java:312) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): ... 10 more 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/w3c/dom/events/EventTarget; 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): ... 10 more 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): Caused by: java.lang.ClassNotFoundException: Didn't find class "org.w3c.dom.events.EventTarget" on path: DexPathList[[zip file "/data/app/~~j6mpgpLbTOaBmECGO2VDdg==/com.xxx.android-eY9BUVhcBhZ_6-C0HJGejA==/base.apk"],nativeLibraryDirectories=[/data/app/~~j6mpgpLbTOaBmECGO2VDdg==/com.xxx.android-eY9BUVhcBhZ_6-C0HJGejA==/lib/arm64, /data/app/~~j6mpgpLbTOaBmECGO2VDdg==/com.xxx.android-eY9BUVhcBhZ_6-C0HJGejA==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]] 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.loadClass(ClassLoader.java:379) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): at java.lang.ClassLoader.loadClass(ClassLoader.java:312) 05-31 18:47:44.426 E/com.xxx.scratch.c.s.a(30483): ... 10 more
解决方案
方案1:添加XML相关依赖到项目
Android SDK并未完整包含所有JRE类,结合项目依赖的Xerces库需求,可手动引入包含EventTarget类的依赖:
在模块级build.gradle的dependencies块中添加:
implementation 'xml-apis:xml-apis:1.4.01' // 或补充JAXB相关依赖以覆盖完整XML处理类 implementation 'javax.xml.bind:jaxb-api:2.3.1' implementation 'org.glassfish.jaxb:jaxb-runtime:2.3.1'
同步项目后重新构建运行。
方案2:配置ProGuard规则(若启用混淆)
如果项目开启了ProGuard,可能是混淆时移除了相关类,在proguard-rules.pro中添加:
-keep class org.w3c.dom.events.** { *; } -keep class org.apache.xerces.dom.** { *; }
确保这些类不被混淆或移除。
方案3:替换为Android内置XML解析器
项目依赖的Xerces库可能与Android环境不兼容,可替换为系统内置解析器:
找到代码中创建DocumentBuilderFactory的位置,修改为:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 禁用DOCTYPE声明避免依赖特定实现 factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
使用Android系统自带解析器,规避外部Xerces依赖。
方案4:调整SDK兼容性配置
在模块级build.gradle中添加:
android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } packagingOptions { pickFirst 'META-INF/*.xml' } }
确保Java版本兼容,打包时正确处理XML相关资源。
内容的提问来源于stack exchange,提问作者BenoitD
相关产品推荐
相关产品推荐

