在使用目标 SDK 29 的 Android 应用程序上从 5.11.0 更新到 Facebook Audience 6.2.0 后,我在一小部分 Android 11 设备上看到了大量崩溃报告。据发生此崩溃并已多次重新安装应用程序进行测试的用户称,崩溃发生在启动后几秒钟,第一次能够看到加载屏幕,然后在第一次之后立即看到。
#00 pc 00000000004dcd84 /apex/com.android.art/lib64/libart.so (art::OatHeader::IsDebuggable() const+124)
#00 pc 00000000004dd3f4 /apex/com.android.art/lib64/libart.so (art::OatFileBase::ShouldUnquickenVDex() const+56)
#00 pc 00000000004dd594 /apex/com.android.art/lib64/libart.so (art::OatFileBase::LoadVdex(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> >*)+80)
#00 pc 00000000004e1594 /apex/com.android.art/lib64/libart.so (art::OatFile::Open(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, bool, art::ArrayRef<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, art::MemMap*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)+468)
#00 pc 00000000004e7d78 /apex/com.android.art/lib64/libart.so (art::OatFileAssistant::OatFileInfo::GetFile()+696)
#00 pc 00000000004e7038 /apex/com.android.art/lib64/libart.so (art::OatFileAssistant::OatFileInfo::Status()+76)
#00 …Run Code Online (Sandbox Code Playgroud) 我的应用程序仅使用某些设备报告一些本机崩溃.我尝试在https://source.android.com/devices/tech/debug/native-crash的帮助下理解堆栈跟踪.
但我找不到原因.
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 0 >>> my.package <<<
backtrace:
#00 pc 0000000000264298 /system/lib64/libart.so (_ZN3art6mirror5Class24ResolvedMethodAccessTestILb1ELb1ELNS_10InvokeTypeE0EEEbNS_6ObjPtrIS1_EEPNS_9ArtMethodEjNS4_INS0_8DexCacheEEE+352)
#01 pc 00000000002978a8 /system/lib64/libart.so (_ZN3art11interpreterL8DoInvokeILNS_10InvokeTypeE0ELb0ELb1EEEbPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+508)
#02 pc 000000000028c824 /system/lib64/libart.so (_ZN3art11interpreter17ExecuteSwitchImplILb1ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_b+36540)
#03 pc 000000000025d6fc /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameENS_6JValueEb+664)
#04 pc 00000000004e4a88 /system/lib64/libart.so (artQuickToInterpreterBridge+1468)
#05 pc 000000000051281c /system/lib64/libart.so (art_quick_to_interpreter_bridge+92)
#06 pc 000000000052da6c /system/framework/arm64/boot.oat (java.util.TimSort.countRunAndMakeAscending+396)
#07 pc 0000000000532508 /system/framework/arm64/boot.oat (java.util.TimSort.sort+440)
#08 pc 000000000044a740 /system/framework/arm64/boot.oat (java.util.Arrays.sort+128)
#09 pc 0000000000811f0c /data/app/my.package-Py1SDcJah4ZBAmxAxgjfww==/oat/arm64/base.odex
Run Code Online (Sandbox Code Playgroud)
这些设备都在Android 8.0上,有:
将目标sdk版本升级到29后,在android 10上出现了很多崩溃:
backtrace:
#00 pc 0000000000082fb4 /apex/com.android.runtime/lib64/bionic/libc.so (abort+160)
#01 pc 00000000004b4888 /apex/com.android.runtime/lib64/libart.so (art::Runtime::Abort(char const*)+2268)
#02 pc 000000000000c5b4 /system/lib64/libbase.so (android::base::LogMessage::~LogMessage()+608)
#03 pc 0000000000442f8c /apex/com.android.runtime/lib64/libart.so (art::OatHeader::GetCompilerFilter() const+280)
#04 pc 000000000044a884 /apex/com.android.runtime/lib64/libart.so (art::OatFile::GetCompilerFilter() const+40)
#05 pc 0000000000455d38 /apex/com.android.runtime/lib64/libart.so (art::OatFileManager::DumpForSigQuit(std::__1::basic_ostream<char, std::__1::char_traits<char>>&)+376)
#06 pc 00000000004c1d78 /apex/com.android.runtime/lib64/libart.so (art::Runtime::DumpForSigQuit(std::__1::basic_ostream<char, std::__1::char_traits<char>>&)+104)
#07 pc 00000000004d5ad8 /apex/com.android.runtime/lib64/libart.so (art::SignalCatcher::HandleSigQuit()+1356)
#08 pc 00000000004d4b6c /apex/com.android.runtime/lib64/libart.so (art::SignalCatcher::Run(void*)+252)
#09 pc 00000000000e205c /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
#10 pc 0000000000084af0 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
Run Code Online (Sandbox Code Playgroud)
build.gradle 如下
implementation 'com.android.installreferrer:installreferrer:2.1'
implementation "com.google.android.gms:play-services-base:17.4.0"
implementation "com.google.android.gms:play-services-gcm:17.0.0"
implementation "com.google.android.gms:play-services-ads:19.3.0"
implementation "com.google.android.gms:play-services-auth:18.1.0"
implementation "com.google.android.gms:play-services-location:17.0.0"
implementation "com.google.firebase:firebase-core:17.5.0"
implementation …Run Code Online (Sandbox Code Playgroud) 我知道 Android 10 也有类似的问题。我在 Android 11 上偶尔看到中止崩溃。这些崩溃的回溯并非 100% 相同,但非常相似。有人能解释一下可能的原因吗?
例如,以下是两个回溯:
从三星设备:
backtrace:
#00 pc 000000000004f064 /apex/com.android.runtime/lib64/bionic/libc.so (abort+164)
#00 pc 000000000053b008 /apex/com.android.art/lib64/libart.so (art::Runtime::Abort(char const*)+2340)
#00 pc 000000000001394c /system/lib64/libbase.so (android::base::SetAborter(std::__1::function<void (char const*)>&&)::$_3::__invoke(char const*)+76)
#00 pc 0000000000006d10 /system/lib64/liblog.so (__android_log_assert+336)
#00 pc 0000000000041b24 /system/lib64/libmedia_jni.so (android::JMediaCodec::configure(android::sp<android::AMessage> const&, android::sp<android::IGraphicBufferProducer> const&, android::sp<android::ICrypto> const&, android::sp<android::hardware::cas::native::V1_0::IDescrambler> const&, int)+488)
#00 pc 0000000000045668 /system/lib64/libmedia_jni.so (android_media_MediaCodec_native_configure(_JNIEnv*, _jobject*, _jobjectArray*, _jobjectArray*, _jobject*, _jobject*, _jobject*, int)+588)
#00 pc 0000000000253200 /system/framework/arm64/boot-framework.oat (art_jni_trampoline+272)
#00 pc 000000000067a3d0 /system/framework/arm64/boot-framework.oat (android.media.MediaCodec.configure+1472)
#00 pc 000000000067b034 /system/framework/arm64/boot-framework.oat (android.media.MediaCodec.configure+68)
#00 pc …Run Code Online (Sandbox Code Playgroud) 我的应用程序在Android 10具有以下调用堆栈的设备上崩溃:
backtrace:
#00 pc 000000000006f06c /apex/com.android.runtime/lib64/bionic/libc.so (abort+160)
#01 pc 00000000000500fc /system/lib64/libc++.so (abort_message+232)
#02 pc 0000000000050218 /system/lib64/libc++.so (demangling_terminate_handler()+44)
#03 pc 00000000000646c4 /system/lib64/libc++.so (std::__terminate(void (*)())+12)
#04 pc 000000000006466c /system/lib64/libc++.so (std::terminate()+52)
#05 pc 00000000000bb150 /system/lib64/libc++.so (std::__1::thread::~thread()+20)
#06 pc 00000000000d0f48 /apex/com.android.runtime/lib64/bionic/libc.so (__cxa_finalize+212)
#07 pc 00000000000cc930 /apex/com.android.runtime/lib64/bionic/libc.so (exit+24)
#08 pc 0000000000032f30 /data/app/com.domain.myapp-Rs_sm5VrLR1Jj8QW6oYByA==/lib/arm64/libplugins_platforms_qtforandroid_arm64-v8a.so
Run Code Online (Sandbox Code Playgroud)
我不知道什么时候以及为什么会发生这种情况,因为我无法在我的设备和模拟器上重现这一点,但这在用户端集中发生,并且只发生在Android 10(不是在以前的 Android 版本上)。
我的QT版本是 5.14.2。