android动态加载.so,实现动态库升级
2016-02-18 11:10
1061 查看
有这两种办法:
第一种:
需求:
有时候应用修复了native层一个小BUG,应用需要更新了,但是用户必须下载整个APK包进行安装,而我们需要的只是替换SO
于是想,能不能加载自定义路径下的 SO 文件呢
答案是完全没问题:
使用系统方法:
void java.lang.System.load(String pathName)
但是有一点,pathName 路径必须有执行权限,意思就是说我们不能加载SD卡上的SO,因为没有执行权限
那也没关系,我们复制到应用私有目录下就OK嘛。
看码
private
void
load() {
这样就完全OK,
我们只需要架个服务器,每次启动时动态监测 SO 文件有没有更新,有则下载SO,然后加载,这样就可以避免用户安装新的应用,
要知道重新安装应用的用户体验是很差的,要让用户无感知的更新他。
第二种:
采用dlopen动态加载第三方库,无非和system.load一样,就是要实现指定路径加载so的目的,这种方法升级so的话,那就的需要一个基本so,一直不变,用来调用dlopen,然后升级另一个so。
这两种办法都会遇到一个问题,就是不能直接加载SD卡中的so,因为sd卡没有执行权限,不能直接加载这种二进制文件,需要拷贝到data/data/packagename/files/ 目录下,再次进行加载即可,拷贝也是有讲究的,需要用到context.openFileOutput方法。
参考链接:
http://www.cnblogs.com/yichouangle/p/3150603.html http://www.eoeandroid.com/forum.php?mod=viewthread&tid=147879&page=1#pid1206129
第一种:
需求:
有时候应用修复了native层一个小BUG,应用需要更新了,但是用户必须下载整个APK包进行安装,而我们需要的只是替换SO
于是想,能不能加载自定义路径下的 SO 文件呢
答案是完全没问题:
使用系统方法:
void java.lang.System.load(String pathName)
但是有一点,pathName 路径必须有执行权限,意思就是说我们不能加载SD卡上的SO,因为没有执行权限
那也没关系,我们复制到应用私有目录下就OK嘛。
看码
private
void
load() {
File dir = getDir("libs", Context.MODE_PRIVATE); File soFile = new File(dir, "libTestJNI.so"); FileUtils.assetToFile(this, "libTestJNI.so", soFile); try { System.load(soFile.getAbsolutePath()); } catch (Exception e) { } }
这样就完全OK,
我们只需要架个服务器,每次启动时动态监测 SO 文件有没有更新,有则下载SO,然后加载,这样就可以避免用户安装新的应用,
要知道重新安装应用的用户体验是很差的,要让用户无感知的更新他。
第二种:
采用dlopen动态加载第三方库,无非和system.load一样,就是要实现指定路径加载so的目的,这种方法升级so的话,那就的需要一个基本so,一直不变,用来调用dlopen,然后升级另一个so。
这两种办法都会遇到一个问题,就是不能直接加载SD卡中的so,因为sd卡没有执行权限,不能直接加载这种二进制文件,需要拷贝到data/data/packagename/files/ 目录下,再次进行加载即可,拷贝也是有讲究的,需要用到context.openFileOutput方法。
参考链接:
http://www.cnblogs.com/yichouangle/p/3150603.html http://www.eoeandroid.com/forum.php?mod=viewthread&tid=147879&page=1#pid1206129
相关文章推荐
- 摘要Android 中常见的Bug
- android6.0 otg连接设备 点亮屏幕(案例)
- Android Studio 2.0 Beta 5发布,修复几个与即时运行相关的严重BUG.
- 关于Android皮肤更换分享
- android 开发过程中,两个包名相同的项目如何上传到同一个应用商城
- android下拉刷新控件 android-pulltorefresh
- Android 添加TextView删除线(代码简单)
- Android重写TextView实现文字整齐排版的方法(附demo源码下载)
- 【Android】10.2 使用Android Support Library增强组件功能
- 【Android】10.1 扩展组件库和其他视图--本章示例主界面
- android应用签名详解
- android 按钮事件
- Android studio 各种快捷键,使用技巧
- Android几个使用频率很高的adb命令小结
- ADB常用命令
- Android 动画详解
- android自定义钟摆loadingView
- Gradle的基本使用
- Android Studio默认产生Fragment
- Android通过Movie展示Gif格式图片