一、前言
这几天用Android整合开源的RTMP推拉流都没成功,好几年没玩Android了碰到好多坑,在Android中为了效率难免需要调用C语言编写生成的SO文件,比如图片渲染加速,视频编解码等插件,今天我们就先聊一下在Android中如何加载SO文件。
二、Android手机CPU架构
1、Android系统支持的CPU架构
-
armeabi:第五代、第六代ARM处理器,使用软件浮点运算,很古老的手机是这架构。
-
armeabi-v7a:第七代ARM处理器,使用硬件浮点运算,2018年以前手机主流架构。
-
arm64-v8a:第八代64位处理器,当前主流架构。
-
x86/x86-64:平板和Android模拟器用得比较多。
每一种CPU架构对应一个ABI,ABI定义了二进制文件(比如SO)如何运行在相应的系统平台。
2、如查查看手机的CPU架构
USB连上手机打开开发者模式
# adb shell
查看CPU架构
# getprop ro.product.cpu.abi
小米11青春版 arm64-v8a
AndroidStudio自带模拟器 x86
三、Android Studio配置加载SO
build.gradle
android {
defaultConfig {
ndk {
abiFilters "armeabi",'x86',
'armeabi-v7a', 'armeabi-v8a',
'arm64-v8a'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['jniLibs']
}
}
}
so文件目录结构
如果你的代码要直接调用SO中的方法,需要LoadLibray加载包并且定义native方法。
注:上面例子我是引入vitamio开源想实验一下RTMP拉流播放,现在SO库是能正常加载了,但播放不了,报错误信息如下,估计是SO版本的兼容性。
另:如果有人对Android的RTMP推拉流开源比较熟悉推荐一个简单易用可以快速整合到自己项目里的,直接用底层 ffmpeg库去玩太难了,我只想稍微玩一把就好。