在Android 12上播放音频时无法播放,总是闪退,看日志找原因也不是特别明显。
后来经过多次测试,发现每次闪退总会打印以下日志:
Fatal signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 0xfffffffe in tid 28393 (ff_read), pid 27351 (oft.dingdongfm3)
通过搜索发现,主要原因是ijkplayer不兼容v8a架构的android手机版本问题
原因:v8a架构的android手机部分机型的硬件使用的MTE机制,在native层使用的过程中为每一个分配的内存空间添加了一个memery tag,在调用的时候会进行检测memery tag是否被改变(主要出于安全性考虑,参考黑客攻击手段缓冲区溢出)
解决办法:
1.native每次分配空间的时候为最高位添加4为memery tag(太麻烦了,博主也没系研究)
2.在AndroidManifest.xml文件中添加 android:allowNativeHeapPointerTagging=“false” 这个属性 如图:
最后非常感谢此文章作者:https://python.iitter.com/other/91575.html,提供的宝贵解决方法。