我在 Google Play 商店中有一个应用程序,每隔几周,我就会在 Google Play Console 中看到带有本机堆栈的崩溃报告,如下所示:
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 0 >>> sk.mimac.slideshow <<<
backtrace:
#00 pc 000000000001ce72 /system/lib/libc.so (abort+62)
#01 pc 00000000000169e8 /system/lib/libminikin.so (abort_with_message(char const*)+24)
#02 pc 0000000000016a44 /system/lib/libminikin.so (__ubsan_handle_add_overflow_minimal_abort+24)
#03 pc 000000000000f22b /system/lib/libminikin.so (void minikin::LayoutCache::getOrCreate<minikin::LayoutAppendFunctor>(minikin::U16StringPiece const&, minikin::Range const&, minikin::MinikinPaint const&, bool, minikin::StartHyphenEdit, minikin::EndHyphenEdit, minikin::LayoutAppendFunctor&)+542)
#04 pc 000000000000ed2d /system/lib/libminikin.so (minikin::Layout::doLayoutWord(unsigned short const*, unsigned int, unsigned int, unsigned int, bool, minikin::MinikinPaint const&, unsigned int, minikin::StartHyphenEdit, minikin::EndHyphenEdit, minikin::LayoutPieces const*, minikin::Layout*, float*, minikin::MinikinExtent*, minikin::MinikinRect*, minikin::LayoutPieces*)+204)
#05 pc 000000000000e8d5 /system/lib/libminikin.so (minikin::Layout::doLayoutRunCached(minikin::U16StringPiece const&, minikin::Range const&, bool, minikin::MinikinPaint const&, unsigned int, minikin::StartHyphenEdit, minikin::EndHyphenEdit, minikin::LayoutPieces const*, minikin::Layout*, float*, minikin::MinikinExtent*, minikin::MinikinRect*, minikin::LayoutPieces*)+244)
#06 pc 000000000000ec09 /system/lib/libminikin.so (minikin::Layout::measureText(minikin::U16StringPiece const&, minikin::Range const&, minikin::Bidi, minikin::MinikinPaint const&, minikin::StartHyphenEdit, minikin::EndHyphenEdit, float*, minikin::MinikinExtent*, minikin::LayoutPieces*)+140)
#07 pc 00000000000890fd /system/lib/libhwui.so (android::MinikinUtils::measureText(android::Paint const*, minikin::Bidi, android::Typeface const*, unsigned short const*, unsigned int, unsigned int, unsigned int, float*)+76)
#08 pc 00000000000d9813 /system/lib/libandroid_runtime.so (android::PaintGlue::getRunAdvance___CIIIIZI_F(_JNIEnv*, _jclass*, long long, _jcharArray*, int, int, int, int, unsigned char, int)+202)
#09 pc 00000000003b3ce3 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.graphics.Paint.nGetRunAdvance+178)
#10 pc 00000000006f0725 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.graphics.Paint.getRunAdvance+172)
#11 pc 00000000006f05c3 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.graphics.Paint.getRunAdvance+250)
#12 pc 0000000000973fb9 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.text.TextLine.getRunAdvance+128)
#13 pc 0000000000974ea9 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.text.TextLine.handleText+312)
#14 pc 0000000000974b67 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.text.TextLine.handleRun+2326)
#15 pc 0000000000975ab1 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.text.TextLine.measure+216)
#16 pc 0000000000975fdd /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.text.TextLine.metrics+44)
#17 pc 0000000000968631 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.text.Layout.getLineExtent+392)
#18 pc 000000000096a8bf /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.text.Layout.drawText+2006)
#19 pc 0000000000969b31 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.text.Layout.draw+128)
#20 pc 0000000000b456fd /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.widget.TextView.onDraw+2804)
#21 pc 0000000000a7a98b /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.View.draw+202)
#22 pc 0000000000a91ec9 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.View.updateDisplayListIfDirty+944)
#23 pc 0000000000a7b78f /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.View.draw+1014)
#24 pc 0000000000b1c4cf /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.ViewGroup.drawChild+54)
#25 pc 0000000000b19a4b /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.ViewGroup.dispatchDraw+1290)
#26 pc 0000000000a7a99b /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.View.draw+218)
#27 pc 0000000000a91ec9 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.View.updateDisplayListIfDirty+944)
#28 pc 0000000000b1a0d7 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.ViewGroup.dispatchGetDisplayList+182)
#29 pc 0000000000a91c0f /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.View.updateDisplayListIfDirty+246)
#30 pc 0000000000b1a0d7 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.ViewGroup.dispatchGetDisplayList+182)
#31 pc 0000000000a91c0f /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.View.updateDisplayListIfDirty+246)
#32 pc 0000000000b1a0d7 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.ViewGroup.dispatchGetDisplayList+182)
#33 pc 0000000000a91c0f /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.View.updateDisplayListIfDirty+246)
#34 pc 0000000000b1a0d7 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.ViewGroup.dispatchGetDisplayList+182)
#35 pc 0000000000a91c0f /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.View.updateDisplayListIfDirty+246)
#36 pc 0000000000b1a0d7 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.ViewGroup.dispatchGetDisplayList+182)
#37 pc 0000000000a91c0f /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.View.updateDisplayListIfDirty+246)
#38 pc 00000000009ba3f5 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.ThreadedRenderer.updateViewTreeDisplayList+76)
#39 pc 00000000009ba155 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.ThreadedRenderer.updateRootDisplayList+212)
#40 pc 00000000009ba4c9 /system/framework/arm/boot-framework.oat (offset 0x3ac000) (android.view.ThreadedRenderer.draw+168)
#41 pc 000000000002b915 /dev/ashmem/dalvik-jit-code-cache (deleted)
有什么方法可以找出导致这次崩溃的原因吗?
谷歌在新系统版本中已经解决了这个问题。 32 位无符号整数可能不够,并且 UB 消毒剂 使长时间运行的应用程序崩溃。 链接https://cs.android.com/android/_/android/platform/frameworks/minikin/+/3744ee60df8c682d28790f4e02a83c0954a11899