Android 缺少SO库(只有armabi)的解决办法
Android 缺少SO库(只有armabi)的解决办法
前段时间做一个项目,需要引用一些第三方的插件,结果插件只有armabi的so库,而项目中其他依赖除过armabi的库外基本都有(“arm64-v8a”, “armeabi-v7a”, “x86”, “x86_64”),假如放到项目中肯定运行崩溃,所以我用load的方法加载armabi的库文件作为通用库,其他的库文件则让系统选择合适的库文件,毕竟armabi效率不是很好
Usage
JNI native 文件
static{String path = FileUtils.checkSoFileExists(DataConfig.context,"libuscasr.so");if(path!=null){System.load(path);}DataConfig.context = null;
}
下面是so读取文件,为什么要IO去读取呢?因为我将so库放在了assets下面了,需要拷贝到系统文件夹下面去加载
public static String checkSoFileExists(Context context,String fileName){final String path = "/libs/";String localPath = context.getFilesDir().getAbsolutePath()+ path;File file =new File(localPath + fileName);if(!file.exists()){//对于经常更换so库的问题,可以添加MD5对比,来更换库文件copySoFile(context,localPath,fileName);if(!file.exists()){return null;}else {return localPath + fileName;}}else{return localPath + fileName;}
}private static void copySoFile(Context context,String filePath,String fileName){final String TAG = "copySoFileTest";InputStream inputStream = null;FileOutputStream fileOutputStream = null;Log.v(TAG, "LazyBandingLib localPath:" + filePath);File libsDir = new File(filePath);if(!libsDir.exists()){//noinspection ResultOfMethodCallIgnoredlibsDir.mkdirs();}try {inputStream = context.getAssets().open(fileName);fileOutputStream = new FileOutputStream(filePath+fileName);//分配缓冲区的大小byte[] bytes = new byte[1024];while (inputStream.read(bytes) != -1) {fileOutputStream.write(bytes);}} catch (Exception e) {e.printStackTrace();}finally {try {if(inputStream!=null) {inputStream.close();}if(fileOutputStream!=null) {fileOutputStream.close();}} catch (IOException e) {e.printStackTrace();}}}
好了,这样只有armabi的情况下也能运行起来,注意假如你的项目只有一个库文件依赖,就没必要这样弄了,用loadlibary就搞定了,本文只针对项目中有的依赖有(“arm64-v8a”, “armeabi-v7a”, “x86”, “x86_64”)库,而有的只有armabi的情况
Android 缺少SO库(只有armabi)的解决办法相关推荐
- 缺少msvcp120.dll、msvcr120.dll解决办法
缺少msvcp120.dll.msvcr120.dll解决办法: 丢失或缺少msvcp120.dll.msvcr120.dll等这些报错是因为我们没有安装vc++运行库,看一下报错对应的数字对应的版本 ...
- Eclipse之Android项目名有红感叹号的解决办法
问题: Eclipse之Android项目名有红感叹号的解决办法 代码都没有错,然后项目有红感叹号 1.找问题原因 点击项目右键,然后点击Build Path,然后再Configure Buil Pa ...
- 《视觉SLAM十四讲》第四讲-ubuntu下安装Sophus库出现问题及解决办法
这里写自定义目录标题 写在前面 1.安装指令: 2.编译过程中出现的问题及解决办法: 问题1: 问题2: 3.使用过程中出现的问题 参考链接 写在前面 本文转载自: [1] haxiongha. ub ...
- 抱歉,进程android.process.media,已停止运行的解决办法
android模似器4.03下载了QQ,搜狗拼音后,双击提示:抱歉,进程android.process.media,已停止运行的解决办法 去到下载内容图标,找到你已经下载的软件(注:可以安装的软件的图 ...
- android edittext字数显示不全,Android的EditText字数检测和限制解决办法
Android的EditText字数检测和限制解决办法 控件EditText在Android布局中经常用到,对EditText中输入的内容也经常需要进行限制,我们可以通过TextWatcher去观察输 ...
- Python在指定环境下安装第三方库的报错解决办法
Python在指定环境下安装第三方库的报错解决办法 在python安装第三方库时,如果直接打开cmd命令提示符,并输入下列安装命令,则会默认安装在base环境下 但base环境下的包新建的虚拟环境是无 ...
- 使用PowerPhotos for Mac查找重复项似乎缺少一些重复的照片的解决办法
应用PowerPhotos for Mac照片管理软件可以很轻松的找到保存的照片中的重复照片,但是有的时候,还是会发现看起来很像的照片没有被清除,怎么办呢?在本篇文章中我们介绍的是如何解决使用Powe ...
- android开发中遇到的技术难题,android开发过程中遇到的问题以及解决办法
####编译的时候遇到的问题: "android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original th ...
- ffmpeg库编译加文字_使用ffmpeg库编译错误及解决办法
一.FFmpeg源代码下载与编译 # wget http://www.ffmpeg.org/releases/ffmpeg-0.5.13.tar.bz2 # tar -jxvf ffmpeg-0.5. ...
最新文章
- nginx常用功能介绍
- .net 面试题系列文章五(附答案)
- Java volatile关键字详解
- 对话苹果公司的一号员工Bill Fernandez
- 稳定婚姻问题和Gale-Shapley算法(转)
- (CODE)计算机视觉引论及数字成像系统
- java生成背景透明的png图片_关于Java生成背景透明的png图片
- mt7620 eeprom 小米_小米CC9 Pro搭载1亿像素传感器,新款手表引关注;谷歌称微信软件性能太差;iPhone明年或配备120Hz屏幕...
- 关于Unity 3D GUI不显示中文问题
- QQ空间说说自动删除代码-真的自动
- avue一些隐藏的配置
- 诚之和:三年销量从 0 破亿,这可能是手机行业最后一个搅局者
- 龙芯2k开发板Debian系统安装教程
- vector 多维向量定义及其初始化
- 安装Mariadb columnStore(10.3版本)
- Hive正则表达式案例总结
- python爬取猫眼电影数据
- 如果流浪地球,信息科学能做什么
- 戒烟产品如何引流?戒烟产品如何寻找客户?戒烟类产品推广方案
- 通过PS把普通照片变成高大上的电影海报大片
热门文章
- Linux系列:二进制 Byte为什么是-127—127范围
- python到底有多牛!用Python开源机器人和5美元,我在Instagram上搞到了2500个真粉儿
- 手把手带你快速入门超越GAN的Normalizing Flow
- python 字符画
- 为什么不能自定义java.lang.String
- java outputstring_关于java:将OutputStream转换为String
- Milvus 2.0 Knowhere 概览
- 水经注对比 bigemap地图下载器
- 从妓到后——史上最令男人动心的女人
- 浅谈H5业务场景下的人脸识别