博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态加载so文件
阅读量:5101 次
发布时间:2019-06-13

本文共 596 字,大约阅读时间需要 1 分钟。

在开发过程中,经常会用到第三方库,比如地图、视频、文档编辑、图表之类。依赖这些库,需要添加其SDK,有时需要用到jni层的So文件,比如百度地图等。

 

那么问题来了,如果两个不同的库之间的so文件发生冲突这么办?

 

比如:单独添加地图的库,运行没有问题。单独添加一个视频库,运行没有问题。但两者同时添加,其中一个库在init的时候报错。这当然和第三方库的开发水平有很大关系,但我们怎么解决这个问题呢?这就用到动态加载的方法。

 

这是原先的静态加载方法,将所有依赖库的so文件全部一股脑的放进armeabi文件夹即可。

 

动态加载的方法,我将冲突的so文件放在assets文件夹中

 

这里需要注意的是:动态加载so的文件只能放在两个地方:1. lib文件夹中,即对应Android Studio中的jniLibs文件夹。2. 本地data/data/package数据目录下。 所以,当应用第一次启动的时候,必须将我们放在assets文件夹中的so文件拷贝乳本地数据目录下。

 

 

 

当然,上面这个方法是将so文件放在程序的assets文件夹。另一种方法是:也可以从网络上下载,放入本地数据目录下。这样的好处是不仅减小的了apk的大小,而且可以随时使用最新的依赖库,这也是动态加载的最多得用途之一。

转载于:https://www.cnblogs.com/android-blogs/p/5505845.html

你可能感兴趣的文章
全栈工程师技能图谱
查看>>
coredump文件设置及调试
查看>>
Android 获取当前应用的版本号和当前系统的版本号
查看>>
集百家言,理百家事!
查看>>
SharePoint 开发学习——简介
查看>>
lucas 定理,组合数取模
查看>>
Java——TreeSet中Comparable/Comparator比较器
查看>>
Android之ViewPager
查看>>
全面理解Javascript闭包和闭包的几种写法及用途
查看>>
【MySQL高可用架构设计】(一)-- mysql复制功能介绍
查看>>
如何使用USSD命令设置呼叫转移
查看>>
XC164单片机TwinCAN模块调试心得 (转)
查看>>
初识CUDA
查看>>
android-常用控件-<四>
查看>>
pring MVC过滤器-HttpPutFormContentFilter
查看>>
Linux之ulimit详解(整理)
查看>>
前端学习blog
查看>>
自己常用网址导航
查看>>
Texstudio中文乱码问题
查看>>
[MongoDB]入门笔记
查看>>