Android加载SO包

一、前言

这几天用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库去玩太难了,我只想稍微玩一把就好。

相关推荐
2501_9159214336 分钟前
如何在苹果手机上面进行抓包?iOS代理抓包,数据流抓包
android·ios·智能手机·小程序·uni-app·iphone·webview
_李小白1 小时前
【Android 美颜相机】第五天:GPUImageFilterTools
android·数码相机
冬奇Lab1 小时前
【Kotlin系列05】集合框架:从Java的冗长到函数式编程的优雅
android·kotlin·编程语言
冬奇Lab1 小时前
稳定性性能系列之十四——电量与网络优化:Battery Historian与弱网处理实战
android·性能优化·debug
Coffeeee1 小时前
了解一下Android16更新事项,拿捏下一波适配
android·前端·google
用户41659673693551 小时前
深入解析安卓 ELF 16KB 页对齐:原生编译与脚本修复的权衡
android
恋猫de小郭2 小时前
Compose Multiplatform 1.10 Interop views 新特性:Overlay 和 Autosizing
android·flutter·macos·kotlin·github·objective-c·cocoa
胖虎12 小时前
Android 文件下载实践:基于 OkHttp 的完整实现与思考
android·okhttp·下载文件·安卓下载·安卓中的下载
_李小白2 小时前
【Android 美颜相机】第四天:CameraLoader、Camera1Loader 与 Camera2Loader
android·数码相机
00后程序员张2 小时前
iOS APP 性能测试工具,监控CPU,实时日志输出
android·ios·小程序·https·uni-app·iphone·webview