用云信sdk 遇到 java.lang.UnsatisfiedLinkError: Can not load ne_audio library. 的问题

来源:互联网 发布:按键精灵网页表格数据 编辑:程序博客网 时间:2024/04/27 13:32

在使用云信sdk开发即时通讯的时候,遇到了一个这样的问题


 java.lang.UnsatisfiedLinkError: Can not load ne_audio library.
                                                               
                                                                   at com.netease.media.internal.util.a.a(Unknown Source)
                                                                   at com.netease.media.a.<init>(Unknown Source)
                                                                   at com.netease.media.a.<init>(Unknown Source)
                                                                   at com.netease.nimlib.sdk.media.record.AudioRecorder.startRecord(Unknown Source)
                                                                   at com.vjfen.app.uikit.session.module.input.InputPanel.onStartAudioRecord(InputPanel.java:587)
                                                                   at com.vjfen.app.uikit.session.module.input.InputPanel.access$1400(InputPanel.java:57)
                                                                   at com.vjfen.app.uikit.session.module.input.InputPanel$9.onTouch(InputPanel.java:543)
                                                                   at android.view.View.dispatchTouchEvent(View.java:9144).....

这个问题只在个别机型上有问题,比如 SM-9200 MI NOTE2  vivo x5m 

刚开始自己认为是少so库,自己对着云信的demo查看,发现自己自己并没有少so.但是云信的demo就不会报错,自己的程序报错

后来查看了自己用的SM-9200手机的cup类型,为arm64-v8a ,而云信的demo并没有arm64-v8a的so库,

我的程序中有其他的sdk用到arm64-v8a这个包,云信就走到这个包中了,但是这个包中并没有对应云信的so库,所以就会出现上面的问题

我 的解决方式删掉了项目中arm64-v8a这个包。。。暂时只能这样决绝了。

我本来还想云信能做arm64-v8a 库支持,但是看到了论坛中关于ABI的讨论


ABI(Application Binary Interface)实际就是指应用程序基于哪种指令集来进行编译,我们能用到的ABI 也就四种  armeabi armeabi-v7a x86 和mips ,前两者是最常见的。

其次这4个编译选项的含义:
1.‘armeabi’ – 默认选项,将创建以基于 ARM* v5TE 的设备为目标的库。 具有这种目标的浮点运算使用软件浮点运算。 使用此 ABI 创建的二进制代码将可以在所有 ARM* 设备上运行。
2.‘armeabi-v7a’ – 创建支持基于 ARM* v7 的设备的库,并将使用硬件 FPU 指令。
3.‘x86’ – 生成的二进制代码可支持包含基于硬件的浮点运算的 IA-32 指令集.
4.mips — 支持应用二进制接口

总结:
APP_ABI 赋值,就是为了交叉编译生成相应芯片可执行的指令集。直观的看就是如果你将 APP_ABI := armeabi armeabi-v7a mips x86  那么在你的android工程下边的 libs 里边会出现 armeabi armeabi-v7a mips x86 这四个目录下会分别生成 4个.so文件。程序在Android手机运行时,根据手机自身CPU芯片不同,去选择调用相应的.so文件。

需要注意的是选择的平台越多,so库也越多,打包的apk体积也越大。
主要3个平台,x86,arm,mips,arm又分为是否支持硬件浮点运算。


可能他不会去支持吧,原因是so库也越多,打包的apk体积也越大,个人看法。。。


0 0
原创粉丝点击