android O平台的项目,最近遇到一个native crash的问题,当连接蓝牙耳机后,点击拨号盘,蓝牙报错。
07-31 16:57:16.503 5678 5678 F DEBUG : Revision: '0'
07-31 16:57:16.503 5678 5678 F DEBUG : ABI: 'arm64'
07-31 16:57:16.503 5678 5678 F DEBUG : pid: 2543, tid: 2859, name: bt_workqueue >>> com.android.bluetooth <<<
07-31 16:57:16.503 5678 5678 F DEBUG : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
07-31 16:57:16.503 5678 5678 F DEBUG : Abort message: 'Pure virtual function called!'
07-31 16:57:16.503 5678 5678 F DEBUG : x0 0000000000000000 x1 0000000000000b2b x2 0000000000000006 x3 0000000000000008
07-31 16:57:16.503 5678 5678 F DEBUG : x4 fefeff6fd93efb73 x5 fefeff6fd93efb73 x6 fefeff6fd93efb73 x7 7f7f7f7fff7fff7f
07-31 16:57:16.503 5678 5678 F DEBUG : x8 0000000000000083 x9 057b1f6b45c10841 x10 0000000000000000 x11 0000000000000001
07-31 16:57:16.503 5678 5678 F DEBUG : x12 ffffffffffffffff x13 0000000000000001 x14 0011861545e7ee00 x15 0000a32bd9bef4a9
07-31 16:57:16.503 5678 5678 F DEBUG : x16 00000070f3bd22f8 x17 00000070f3b73d40 x18 0000000000000032 x19 00000000000009ef
07-31 16:57:16.503 5678 5678 F DEBUG : x20 0000000000000b2b x21 00000000ffffffc8 x22 00000070da400830 x23 00000070f3bd4a00
07-31 16:57:16.503 5678 5678 F DEBUG : x24 00000070da400700 x25 00000070da400740 x26 00000070da400768 x27 00000070db77a1a8
07-31 16:57:16.503 5678 5678 F DEBUG : x28 00000070db779430 x29 00000070da400670 x30 00000070f3b27e54
07-31 16:57:16.503 5678 5678 F DEBUG : sp 00000070da400630 pc 00000070f3b73d48 pstate 0000000060000000
07-31 16:57:16.553 5678 5678 F DEBUG :
07-31 16:57:16.553 5678 5678 F DEBUG : backtrace:
07-31 16:57:16.553 5678 5678 F DEBUG : #00 pc 0000000000069d48 /system/lib64/libc.so (tgkill+8)
07-31 16:57:16.553 5678 5678 F DEBUG : #01 pc 000000000001de50 /system/lib64/libc.so (abort+88)
07-31 16:57:16.553 5678 5678 F DEBUG : #02 pc 0000000000043510 /system/lib64/libc++.so (abort_message+244)
07-31 16:57:16.553 5678 5678 F DEBUG : #03 pc 0000000000067d48 /system/lib64/libc++.so (__cxa_pure_virtual+16)
07-31 16:57:16.553 5678 5678 F DEBUG : #04 pc 000000000003354c /system/lib64/hw/bluetooth.default.so (_Z16bta_av_data_pathP11tBTA_AV_SCBP12tBTA_AV_DATA+120)
07-31 16:57:16.553 5678 5678 F DEBUG : #05 pc 000000000003e384 /system/lib64/hw/bluetooth.default.so (_Z18bta_av_ssm_executeP11tBTA_AV_SCBtP12tBTA_AV_DATA+768)
07-31 16:57:16.553 5678 5678 F DEBUG : #06 pc 000000000003d990 /system/lib64/hw/bluetooth.default.so (_ZL14bta_av_ci_dataP12tBTA_AV_DATA+300)
07-31 16:57:16.553 5678 5678 F DEBUG : #07 pc 000000000003cee4 /system/lib64/hw/bluetooth.default.so (_Z16bta_av_hdl_eventP6BT_HDR+300)
07-31 16:57:16.553 5678 5678 F DEBUG : #08 pc 000000000007d84c /system/lib64/hw/bluetooth.default.so (_Z13bta_sys_eventP6BT_HDR+116)
07-31 16:57:16.553 5678 5678 F DEBUG : #09 pc 00000000001db30c /system/lib64/hw/bluetooth.default.so (_ZL22internal_dequeue_readyPv+80)
07-31 16:57:16.553 5678 5678 F DEBUG : #10 pc 00000000001dfb54 /system/lib64/hw/bluetooth.default.so (_ZL11run_reactorP9reactor_ti+312)
07-31 16:57:16.553 5678 5678 F DEBUG : #11 pc 00000000001df9f0 /system/lib64/hw/bluetooth.default.so (_Z13reactor_startP9reactor_t+80)
07-31 16:57:16.553 5678 5678 F DEBUG : #12 pc 00000000001e1384 /system/lib64/hw/bluetooth.default.so (_ZL10run_threadPv+256)
报错代码如上,报错的地方属于蓝牙协议栈,相应的tombstone也提示一样的报错信息,找到报错版本的符号表bluetooth.default.so,用addr2line工具反编译找到相对应的行
提示时bta_av_aact.cc的2267行报错,查找相关的代码,发现是bta_av_data_path函数中报错,结合报错时间点的system log, event log, main log,以及报错的操作,最终得出结论,这个是由于该项目的蓝牙音频编码采用的是SBC编码,而不是采用split a2dp的方式,所以,当SBC模式下,关闭蓝牙的时候需要停止媒体音频的播放。,修改如下所示:
可以看出,当前音频模式不是split a2dp的时候,就停止a2dp_source角色的功能。