Android 13设备getHistoricalRawPointerCoords索引无效崩溃原因排查
Android 13设备偶发SIGABRT崩溃排查记录
崩溃基本情况
不同Android 13设备上偶发以下崩溃:
[libc.so] abort SIGABRT
线程信息:
getHistoricalRawPointerCoords: Invalid historical index 1 for MotionEvent { action=UP, id[0]=0, x[0]=810.527, y[0]=1609.98, eventTime=232287463228000, downTime=232287242045000, deviceId=3, source=TOUCHSCREEN, displayId=0, eventId=<US_SOCIAL_SECURITY_NUMBER>}
注:应用与美国社保无关,未访问用户账户信息或使用第三方广告包。
调用栈
#00 pc 0x0000000000051ce8 /apex/com.android.runtime/lib64/bionic/libc.so (abort+164) #01 pc 0x00000000006f9f28 /apex/com.android.art/lib64/libart.so (art::Runtime::Abort(char const*)+472) #02 pc 0x0000000000016ea8 /apex/com.android.art/lib64/libbase.so (android::base::SetAborter(std::__1::function<void (char const*)>&&)::$_3::__invoke(char const*)+80) #03 pc 0x00000000000a3090 /system/lib64/libbinder.so (android::base::LogMessage::~LogMessage()+352) #04 pc 0x000000000002a824 /system/lib64/libinput.so (android::MotionEvent::getHistoricalRawPointerCoords(unsigned long, unsigned long) const+504) #05 pc 0x000000000002a578 /system/lib64/libinput.so (android::MotionEvent::getHistoricalRawAxisValue(int, unsigned long, unsigned long) const+28) #06 pc 0x0000000000048c40 /system/lib64/libinput.so (android::VelocityTracker::addMovement(android::MotionEvent const*)+496) #07 pc 0x00000000002f0384 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (art_jni_trampoline+132) #08 pc 0x0000000000c93f14 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (android.view.VelocityTracker.addMovement+68) #09 pc 0x0000000000c80bb4 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (android.view.GestureDetector.onTouchEvent+660) #10 pc 0x0000000000c924d0 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (android.view.ScaleGestureDetector.onTouchEvent+176) #11 pc 0x000000000020a2b0 /apex/com.android.art/lib64/libart.so (nterp_helper+4016)
相关代码
relativeLayoutFoo.setOnTouchListener((v, event) -> { try { if (event == null) { return false; } else { //consume event } } catch (Exception ex) { } return false; });
排查过程更新
更新[2023-05-26]
已修改代码通过MotionEvent.obtain(event)仅消费MotionEvent副本,但无改善。该崩溃仅出现在Android 13设备上,截图显示受影响设备均为Android 13版本。该问题疑似与Android官方已知的输入系统问题相关。
更新[2023-10-01]
附另一Android 13设备的崩溃报告,其eventId为2097529323而非<US_SOCIAL_SECURITY_NUMBER>:
Thread: getHistoricalRawPointerCoords: Invalid array index 6 for MotionEvent { action=POINTER_DOWN(3), id[0]=1, x[0]=748.557, y[0]=1198.73, id[1]=2, x[1]=728.326, y[1]=1627.55, id[2]=3, x[2]=295.227, y[2]=1446.13, id[3]=6, x[3]=633.913, y[3]=1036.8, pointerCount=4, eventTime=15864785755000, downTime=15491031632000, deviceId=2, source=TOUCHSCREEN, displayId=0, eventId=2097529323} backtrace: #00 pc 0x0000000000062eee /apex/com.android.runtime/lib/bionic/libc.so (abort+138) #01 pc 0x00000000005406db /apex/com.android.art/lib/libart.so (art::Runtime::Abort(char const*)+1406) #02 pc 0x00000000000238ad /apex/com.google.mainline.primary.libs@340817060/lib/libbase.so/23d1f2e6ffbc35ebafef6e31362a3ad20b7abe9823895afd2d10c652dbdbbe07db02a7a5f2db936dc8c8553a986dd6324be678f3d22e389cd8261ae6d5bcecc3/libbase.so (android::base::SetAborter(std::__1::function<void (char const*)>&&)::$_0::__invoke(char const*)+48) #03 pc 0x0000000000071b5d /system/lib/libbinder.so (android::base::LogMessage::~LogMessage()+228) #04 pc 0x00000000000206e1 /system/lib/libinput.so (android::MotionEvent::getHistoricalRawPointerCoords(unsigned int, unsigned int) const+456) #05 pc 0x000000000002047d /system/lib/libinput.so (android::MotionEvent::getRawAxisValue(int, unsigned int) const+36) #06 pc 0x000000000033d3b5 /data/misc/apexdata/com.android.art/dalvik-cache/arm/boot.oat (art_jni_trampoline+60) #07 pc 0x0000000000b8bd4d /data/misc/apexdata/com.android.art/dalvik-cache/arm/boot.oat (android.view.MotionEvent.getRawX+156) #08 pc 0x0000000000a69aa7 /data/misc/apexdata/com.android.art/dalvik-cache/arm/boot.oat (android.view.GestureDetector.onTouchEvent+438)
更新[2024-07-08]
移除标准双击检测代码后,该问题得到解决,疑似与手势检测的系统兼容性问题相关。
内容的提问来源于stack exchange,提问作者Hong
相关产品推荐
相关产品推荐

