这是ijk的包缺少armX86-64的问题
添加对应的即可
下面对为什么部分机型会错误的原因分析(注JCVD是开源安卓视频播放器,分析摘自issues,也是本人回答的)
android下目前有这几种架构的cpu
ARMv5,ARMv7,x86,MIPS,ARMv8,MIPS64和x86_64
你apk一般包涵以上某几种cpu架构的so文件。当应用安装在设备的时候只会把对应cpu架构的so引入。
其实一个cpu架构不只支持一种so。arm可以兼容。大部分x86的cpu可以兼容arm的,64位的cpu也可以运行32位的so,当然运行效率肯定没有对应的好,相关优化也没有,安卓碎片化的问题,很可能某个x86的cpu不支持arm兼容,或者运行起来很卡。
下面将你出现的问题,群里你说你的是运行在64位cpu下出的崩溃问题
比如我的项目中 有微博的SDK 微博可能提供了ARMv7,x86,MIPS,ARMv8,MIPS64和x86_64平台的。
当前我再去用JCVD,只引如了ijk的 armv7的包。这样我的项目会在mips mips64 x86_64 等机器上出现crash
系统在装载So文件的时候会先检查当前cpu是否有对应的so 如果没有则查看是否有适配包的
如果没有会crash ,上面的实例中运行在mips的时候 他发现有mips的文件夹就会傻傻的认为 微博和JCVD都提供了mips的so,这样在mips的手机调用JCVD的时候就会发生crash
解决你的问题 你可以结合上述 干掉某些so,其实最简单的是 设置
defaultConfig {
...
ndk {
abiFilters "armeabi-v7a",“xxcpu架构"
}
}
abiFilters后面保证你每个sdk提供的so都有,其实你看懂上述的内容 都不用这个配置可以搞定的
最后一点 不要以牺牲某个cpu构架的so来减少apk大小,尽可能使用更多cpu构架的so
其实可以通过动态下载so来解决这个问题流程为
打开app->检测cpu构架->下载对应so->调用对应so的功能