Android aar包的so和jniLibs中的so库冲突
以具体的情景带入,我在项目中引用了百度语音的sdk,和vlc的aar, 当先前只集成了vlc的时候,视频能正常播放,集成完百度语音发现语音功能相关一切正常,但是vlc却崩溃了,百分之百的已经确定是因为后来集成了百度语音的原因从而影响了vlc的集成功能,为什么会这样呢?首先查看日志记录如下,可以发现崩溃的原因是找不到nativeNew的实现方法:
然后跟踪到nativeNew方法所在的地方:
private native void nativeNew(String[] var1, String var2);
从而可知,这是个jni,调用的是aar中so库里面的C++方法。后来集成百度语音的时候,根据百度的接口文档在项目中新建了jniLibs并放入了百度语音所需要的so文件,就是因为这后来导入的jniLibs,导致了先前功能好用的aar包的so库和jniLibs的so库冲突了,最开始的解决方案是既然如此就不能按照百度语音的常规说明来集成了,虽然现在的语音文档说明so库要放在jniLibs中,但是一年多以前的时候,那时候做百度地图的时候,百度地图提供的官方文档提供了2种方式集成地图的so:
1.和现在一样都放在jniLibs中,自动配置
2.把放在jniLibs中的so库都放在libs中,然后手动配置jniLibs的路径为libs。
都是百度提供的殊途同归,于是走当时百度地图的老套路,把百度语音的so库都放在libs下,然后手动配置
sourceSets {main {jniLibs.srcDirs = ['libs']}}
重新编译运行,如果幸运的话成功运行,两方的so库都能成功配置功能正常,就可以不用看下文了,但是如果没有,错误没有解决,那么请尝试第二种方案:查看aar包的so库导入位置,并和百度语音的so库路径完全匹配:
图1 图2
图1是项目中百度语音的jniLibs,图2是aar包的项目源码结构,jniLibs装的是vlc中的so,一般集成百度的so,jniLibs都会放不止一个文件夹,比如x86,armebi,armebi-v7a等等大约4到5个,但是因为aar包的项目jniLibs只有一个armeabi-v7a,所以为了匹配aar便把其他的都删了,保留的跟aar路径相同,重新编译运行,完美兼容两方so
Android aar包的so和jniLibs中的so库冲突相关推荐
- Android aar 包修改源代码和布局资源id
Android aar 包修改源代码和布局资源id 原文地址 https://www.jianshu.com/p/bdb62f36bc62 注:本项目基于 Android Studio 讲解,Inte ...
- 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )
文章目录 I . 动态库 与 静态库 II . 编译动态库 III. Android Studio 使用第三方动态库 IV . Android Studio 关键代码 V . 博客资源 I . 动态库 ...
- android studio打包apk,jnilibs中的so库未被加载到apk内
不久前,因为需要接入人脸识别以及某个tts的播报功能,人脸识别使用旷世,语音本地播报使用思必驰,在集成的时候出现思必驰的so库无法集成到apk内,思必驰的so库结构为: ,旷世的sdk却是使用的aar ...
- android aar 修改,Android aar包修改代码后重新打包
修改aar包代码的几个步骤: 1.解压出arr包:unzip xxx.aar -d tempFolder 2.找到classes.jar文件,并使用jd-gui查看代码,找到需要修改的文件: 3.打开 ...
- Android开发之Android Studio依赖aar包的四种方法(附加第三方库依赖方式)
使用AS任意版本: 方法一: repositories {flatDir {dirs 'libs'}} implementation (name: 'paylibrary_v1.0', ext: 'a ...
- android找不到aar包
转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/9939663.html 在做项目的时候引入aar包,编译的时候却提示错误(这个错误大概说的是...... ...
- android生成aar无效,android studio生成aar包并在其他工程引用aar包的方法
1.aar包是android studio下打包android工程中src.res.lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件 ...
- 一个android工程生成两个aar,android studio生成aar包并在其他工程引用aar包(示例代码)...
1.aar包是android studio下打包android工程中src.res.lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件 ...
- Gradle依赖本地aar包
文章目录 一.本地仓库的方式(推荐) 1.生成本地aar仓库 2.依赖本地aar仓库 二.编译生成aar包的方式 一.本地仓库的方式(推荐) 1.生成本地aar仓库 step1.在项目Module b ...
最新文章
- 黑客基础知识与防护(一)
- ViewPager 详解(五)-----使用Fragment实现ViewPager滑动
- boost::hana::then用法的测试程序
- latex 表格中虚线_如何识别和修复表格识别中的虚线
- Swift 3到5.1新特性整理
- Spring Boot 使用模板引擎
- Vue.js 2.5 发布,而这个会玩的团队已经自研出用 Vue 开发小程序的框架了
- -1在numpy重塑中是什么意思?
- 运输计划 洛谷P2680
- VS2017使用教程(使用VS2017编写C语言程序)
- [机器学习必知必会]泛化误差率的偏差-方差分解
- No way to dispatch this command to Redis Cluster because keys have different slots.
- 手机android app 无线控制led灯开关
- 如何让百度搜索结果显示网站 logo
- QT 开发板无法显示GIF图片,windows能正常显示问题
- 数据结构笔记(六)——散列(Hash Table)之双散列和再散列(4)
- MySQL自定义函数的使用及MySQL中的流程控制语句
- JS 浮点数转整数的方法
- 将计算机组织管理策略用于微信群管理
- 垃圾回收器都有哪些?
热门文章
- 开发手札:git日常抽风记录
- 运用电脑辅助 对彩票号码 进行 数字分析 — 华东15选5
- mysql中information_schema数据库
- 计算机基础知识是一级吗,计算机二级和初级的区别 初级是一级吗
- 薛定谔 | 诱导契合对接(结合位点柔性)
- 余承东:华为技术走在产业前列,别人想超越很难;理想销量夺冠后,员工不满年终奖打折;黑客窃取GitHub代码签名证书|极客头条
- OpenCV图像基本操作——图像合成
- MIT6.824-lab2A-2022篇(万字推导思路及代码构建)
- 数据库主从分离和读写分离
- See!AI正在悄然改变着医学诊断、假肢和视觉辅助