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

ANR问题求助:art::DexFile::FindClassDef触发无业务代码关联报错

Firebase Crashlytics上报ANR问题排查建议(ArtDexFileLoader相关)

从调用栈来看,这是应用启动阶段发生的ANR,核心卡在Android Runtime的Dex文件校验流程中,由ArtDexFileLoader加载Zip包中的Dex文件时触发,未关联业务代码或第三方库,可从以下方向排查:

调用栈详情

main (native):tid=1 systid=10067 
#00 pc 0x18de0 libdexfile.so (art::DexFile::FindClassDef(art::dex::TypeIndex) const + 30)
#01 pc 0x2484d libdexfile.so (art::dex::DexFileVerifier::CheckInterClassDefItem() + 536)
#02 pc 0x2594d libdexfile.so (art::dex::DexFileVerifier::CheckInterSectionIterate(unsigned int, unsigned int, art::DexFile::MapItemType) + 216)
#03 pc 0x25b1f libdexfile.so (art::dex::DexFileVerifier::CheckInterSection() + 186)
#04 pc 0x25c1f libdexfile.so (art::dex::DexFileVerifier::Verify() + 130)
#05 pc 0x26219 libdexfile.so (art::dex::Verify(art::DexFile const*, unsigned char const*, unsigned int, char const*, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) + 140)
#06 pc 0x1c2db libdexfile.so (art::DexFileLoader::OpenCommon(unsigned char const*, unsigned int, unsigned char const*, unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, art::OatDexFile const*, bool, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, std::__1::unique_ptr<art::DexFileContainer, std::__1::default_delete<art::DexFileContainer> >, art::DexFileLoader::VerifyResult*) + 198)
#07 pc 0x15ea7 libdexfile.so (art::ArtDexFileLoader::OpenOneDexFileFromZip(art::ZipArchive const&, char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, art::DexFileLoaderErrorCode*) const + 686)
#08 pc 0x159cf libdexfile.so (art::ArtDexFileLoader::OpenAllDexFilesFromZip(art::ZipArchive const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, std::__1::vector<std::__1::unique_ptr<art::DexFile const, std::__1::default_delete<art::DexFile const> >, std::__1::allocator<std::__1::unique_ptr<art::DexFile const, std::__1::default_delete<art::DexFile const> > > >*) const + 298)
#09 pc 0x157cb libdexfile.so (art::ArtDexFileLoader::OpenZip(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, std::__1::vector<std::__1::unique_ptr<art::DexFile const, std::__1::default_delete<art::DexFile const> >, std::__1::allocator<std::__1::unique_ptr<art::DexFile const, std::__1::default_delete<art::DexFile const> > > >*) const + 154)
#10 pc 0x15531 libdexfile.so (art::ArtDexFileLoader::OpenWithMagic(unsigned int, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, std::__1::vector<std::__1::unique_ptr<art::DexFile const, std::__1::default_delete<art::DexFile const> >, std::__1::allocator<std::__1::unique_ptr<art::DexFile const, std::__1::default_delete<art::DexFile const> > > >*) const + 208)
#11 pc 0x1543d libdexfile.so (art::ArtDexFileLoader::Open(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, std::__1::vector<std::__1::unique_ptr<art::DexFile const, std::__1::default_delete<art::DexFile const> >, std::__1::allocator<std::__1::unique_ptr<art::DexFile const, std::__1::default_delete<art::DexFile const> > > >*) const + 96)
#12 pc 0x3ac709 libart.so (art::OatFileManager::OpenDexFilesFromOat(char const*, _jobject*, _jobjectArray*, art::OatFile const**, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >*) + 3032)
#13 pc 0x373a09 libart.so (art::DexFile_openDexFileNative(_JNIEnv*, _jclass*, _jstring*, _jstring*, int, _jobject*, _jobjectArray*) + 92)
       at dalvik.system.DexFile.openDexFileNative(Native method)
       at dalvik.system.DexFile.openDexFile(DexFile.java:367)
       at dalvik.system.DexFile.<init>(DexFile.java:109)
       at dalvik.system.DexFile.<init>(DexFile.java:82)
       at dalvik.system.DexPathList.loadDexFile(DexPathList.java:439)
       at dalvik.system.DexPathList.makeDexElements(DexPathList.java:398)
       at dalvik.system.DexPathList.<init>(DexPathList.java:166)
       at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:129)
       at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:104)
       at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:74)
       at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:87)
       at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:116)
       at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:114)
       at android.app.ApplicationLoaders.getClassLoaderWithSharedLibraries(ApplicationLoaders.java:60)
       at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:907)
       at android.app.LoadedApk.getClassLoader(LoadedApk.java:964)
       at android.app.LoadedApk.getResources(LoadedApk.java:1196)
       at android.app.ContextImpl.createAppContext(ContextImpl.java:2672)
       at android.app.ContextImpl.createAppContext(ContextImpl.java:2664)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6921)
       at android.app.ActivityThread.access$1700(ActivityThread.java:263)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2057)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:236)
       at android.app.ActivityThread.main(ActivityThread.java:8097)
       at java.lang.reflect.Method.invoke(Native method)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)

排查方向

  • 验证APK完整性:用户设备上的APK可能在下载或安装过程中损坏,导致Dex文件结构异常。可引导用户重新下载安装,或在测试环境中校验APK签名与哈希值。
  • 排查系统版本兼容性:查看崩溃设备的Android版本分布,部分旧版本(如Android 8.x/9.x)的Art Runtime存在Dex校验的已知bug,可针对性在对应版本设备上复现测试。
  • 检查打包配置:若应用开启了代码混淆(R8/ProGuard)、多Dex或自定义打包流程,可能导致Dex文件生成异常。尝试关闭混淆打包测试,或更新Gradle插件、R8版本至最新稳定版。
  • 排查动态加载/插件化:即使调用栈未显示,若应用使用插件化或动态加载框架,加载插件Dex时可能触发该问题。暂时禁用插件化功能测试,或检查插件Dex的打包规范。
  • 定制ROM适配问题:部分厂商定制ROM修改了Art Runtime逻辑,可能导致Dex校验卡住。查看崩溃设备的品牌型号,是否集中在特定厂商机型上,针对性适配。
  • 启用Art调试日志:在测试设备上通过命令adb shell setprop debug.art.dex.verify all开启详细Dex校验日志,获取具体报错的Dex文件或类信息,缩小排查范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:12:32