简介
通过本篇教程, 您可以了解到, 在某些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.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)