ijkplayer适配Android 11以上的版本

播放视频在android11手机上各种闪退的问题,

适配中发现一进入视频播放页面就会崩溃,播放在线视频时崩溃,而本地视频播放正常。崩溃日志如下:

Fatal 14:46:17.826 Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x74bdc3dd18 in tid 4399 (ff_read), pid 1990 (om.lindian.user)
Fatal 14:46:17.912 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

Fatal 14:46:17.912 Build fingerprint: 'Xiaomi/venus/venus:11/RKQ1.200928.002/V12.5.13.0.RKBCNXM:user/release-keys'

Fatal 14:46:17.912 Revision: '0'

Fatal 14:46:17.912 ABI: 'arm64'

Fatal 14:46:17.912 Timestamp: 2022-03-16 14:46:17+0800

Fatal 14:46:17.912 pid: 1990, tid: 4399, name: ff_read  >>> com.lindian.user <<<

Fatal 14:46:17.912 uid: 14942

Fatal 14:46:17.912 signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x74bdc3dd18

Fatal 14:46:17.912     x0  b4000074bdfa7400  x1  0000000000000001  x2  00000074c37f28b8  x3  0000000000001038

Fatal 14:46:17.912     x4  b4000074bdc3dd18  x5  8080008080800000  x6  feff06fefeff07fe  x7  7f7f7f7f7f7f7fff

Fatal 14:46:17.912     x8  0101010101010101  x9  00000000000c99b8  x10 0000000010624dd3  x11 00000c08d3cc3c86

Fatal 14:46:17.912     x12 0000000034155555  x13 0000000000000018  x14 00000c08d3cb18f8  x15 00ffffffffffffff

Fatal 14:46:17.912     x16 00000074d3d29490  x17 00000075f255d2f0  x18 00000074b098c000  x19 00000074c37f28b8

Fatal 14:46:17.912     x20 b4000074bdfa7400  x21 b4000074bca326e0  x22 b4000074bca32680  x23 0000000000000000

Fatal 14:46:17.912     x24 0005da50454339f8  x25 00000074c37f3cc0  x26 00000074c37f3b48  x27 00000000000fc000

Fatal 14:46:17.912     x28 0000000000000001  x29 00000074c37f3c70

Fatal 14:46:17.912     lr  00000074d3ab93b4  sp  00000074c37f2860  pc  00000074bdc3dd18  pst 0000000000001000

Fatal 14:46:17.998 backtrace:

Fatal 14:46:17.998       #00 pc 0000000001918d18  [anon:libc_malloc]

大致一看问题出到了播放器so包上面,这个是App中用到libijkplayer播放器的so文件。

从 Android 11开始,对于64位进程,所有堆分配都具有一个由实现定义的标记,该标记在具有对ARM Top-byte Ignore (TBI) 的内核支持的设备上的指针顶部字节中设置。在回收期间检查该标记时,任何修改此标记的应用都会被终止。对于未来支持 ARM 内存标记扩展 (MTE) 的硬件来说,这是必需的。

所以需要播放器so将指针的顶部字节错误使用部分修改:

指向特定类型的指针将特定于应用的元数据存储在前16个地址位中。
指针的类型转换为双精度,然后又恢复为原来的类型,因此丢失了较低的地址位。
代码计算不同堆栈帧的局部变量地址之间的差异,作为测量递归深度的方法。

因为使用播放器版本过老,升级新版本成本过大,所以使用过渡方案,关闭指针标记功能,在 AndroidManifest.xml 文件中添加: 

<application android:allowNativeHeapPointerTagging="false">
  ...
</application>

或者更换最新的播放器so包

例如:

适配android11及以上版本的ijkplayer播放器so包-Android文档类资源-CSDN下载

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android是一个开源的移动操作系统,由Google开发。它的各个版本都有不同的特性和要求。下面是Android各个版本情况: 1. Android 1.0:这是Android的首个正式版本,发布于2008年。它主要了当时的早期智能手机。 2. Android 1.5 Cupcake:这个版本引入了许多新特性,包括虚拟键盘、文本选择和复制功能等。它的要求相对较低,可以在较旧的设备上运行。 3. Android 1.6 Donut:这个版本增加了搜索框和快捷方式等功能。它的要求与Cupcake相似。 4. Android 2.0/2.1 Eclair:这个版本引入了许多新特性,包括支持多点触控、HTML5视频播放和Live壁纸等。它的要求相对较高,需要较新的设备支持。 5. Android 2.2 Froyo:这个版本引入了许多新特性,包括支持移动热点和Adobe Flash等。它的要求与Eclair相似。 6. Android 2.3 Gingerbread:这个版本引入了许多新特性,包括支持NFC和下载管理器等。它的要求相对较高,需要较新的设备支持。 7. Android 4.0 Ice Cream Sandwich:这个版本引入了许多新特性,包括全新的用户界面和面部解锁等。它的要求相对较高,需要较新的设备支持。 8. Android 4.1/4.2/4.3 Jelly Bean:这个版本引入了许多新特性,包括Google Now和通知增强等。它的要求与Ice Cream Sandwich相似。 9. Android 4.4 KitKat:这个版本引入了许多新特性,包括透明状态栏和打印支持等。它的要求相对较高,需要较新的设备支持。 10. Android 5.0/5.1 Lollipop:这个版本引入了许多新特性,包括Material Design和多用户支持等。它的要求相对较高,需要较新的设备支持。 11. Android 6.0 Marshmallow:这个版本引入了许多新特性,包括指纹识别和运行时权限等。它的要求相对较高,需要较新的设备支持。 12. Android 7.0/7.1 Nougat:这个版本引入了许多新特性,包括分屏模式和通知增强等。它的要求相对较高,需要较新的设备支持。 13. Android 8.0/8.1 Oreo:这个版本引入了许多新特性,包括自应图标和通知渠道等。它的要求相对较高,需要较新的设备支持。 14. Android 9 Pie:这个版本引入了许多新特性,包括手势导航和应用程序切片等。它的要求相对较高,需要较新的设备支持。 15. Android 10:这个版本引入了许多新特性,包括暗黑模式和系统级录屏等。它的要求相对较高,需要较新的设备支持。 16. Android 11:这个版本引入了许多新特性,包括聊天气泡和无线Android Auto等。它的要求相对较高,需要较新的设备支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易寻资料

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值