[声网音频SDK实战教程] 关于在某些Android9手机上, 加载声网SDK时报SIGABRT错误的问题定位

简介

通过本篇教程, 您可以了解到, 在某些Android9手机上, 加载声网SDK时报SIGABRT错误的一种原因之一.


问题描述

我们APP通过 Bugly 采集到很多加载声网SDK时, 报SIGABRT的问题.

报错堆栈如下 :


#00 pc 0001e990 /system/lib/arm/nb/libc.so (abort+4) [armeabi-v7a::f1478175a6e1d79b85bd0f9edf43ead1]
2
java:
3
java.lang.Runtime.loadLibrary0(Runtime.java:1030)
4
java.lang.System.loadLibrary(System.java:1675)
5
io.agora.rtc.internal.RtcEngineImpl.void loadLibrary(java.lang.String)(RtcEngineImpl.java:149)
6
io.agora.rtc.internal.RtcEngineImpl.void loadNativeLibrary()(RtcEngineImpl.java:154)
7
io.agora.rtc.internal.RtcEngineImpl.boolean initializeNativeLibs()(RtcEngineImpl.java:260)
8
io.agora.rtc.RtcEngine.io.agora.rtc.RtcEngine create(io.agora.rtc.RtcEngineConfig)(RtcEngine.java:102)


几乎都是在Android9上面报出的.


问题原因

出现该问题的原因是因为我们APP没有配置支持 “模拟器” 的CPU架构, 也就是 x86,
我们为了减少包体大小, 只支持 'armeabi-v7a', 'arm64-v8a’, 没有支持 'x86', ‘x86_64’.
另外我们使用的是声网 3.X的SDK.

那么如何定位出现问题的用户设备是模拟器呢?

只要在 Bugly 的其他信息下面, 发现了 /system/framework/x86/boot.oat , 基本就可以实锤了.


为什么是Android9的设备呢?

因为模拟器是雷电9.


解决方案

1] 可以适配 'x86', ‘x86_64’. 
不过, 这个工作量还是巨大的, 需要排查所有的第三方 .so 库, 是否可以支持 'x86', ‘x86_64’.


2] 升到声网4.x的SDK

声网提供的升级3.x到4.x的技术文档 :

经验文档https://docs.qq.com/sheet/DWWFUZ2xGdEJHZE5x?tab=BB08J2&code=S7Ki3-lEJ6CPDvcpT7QMvE0rtsVGCQjDjaMumombM04&state=weworklogin

官网示例https://docs.agora.io/cn/video-call-4.x/migrate_to_ng?platform=Android


我们APP在适配声网4.x的SDK之后, 不需要增加 'x86', ‘x86_64’., 依然是只支持 'armeabi-v7a', 'arm64-v8a’,
就可以支持如下模拟器上面运行我们的APP了.

1] mumu (MAC系统, 版本1.9.45)
2] mumu (MAC系统, 版本1.9.55)
3] mumu (MAC系统, 版本1.9.58)
4] 夜神 (MAC系统, 版本3.8.5.7)
5] mumu (Windows系统, 版本2.7.17.0(x64)20230208180519)
6] 雷电(Windows系统, 版本 9.0.37)
7] 雷电(Windows系统, 版本 4.0.83(64) )
8] 夜神(Windows系统, 版本 7.0.5.2010)

推荐阅读
相关专栏
开发者实践
186 文章
本专栏仅用于分享音视频相关的技术文章,与其他开发者和声网 研发团队交流、分享行业前沿技术、资讯。发帖前,请参考「社区发帖指南」,方便您更好的展示所发表的文章和内容。