mmkv框架移植

最近不想用Android原生的SharedPreferences存储方式了,众所周知,SharedPreferences会存在卡顿的现象。也许有人想改用apply()的提交方式,但这样会存在数据丢失的现象。于是便想使用腾讯的MMKV框架存储键值对。

 

问题来了,当我使如下方式引入框架的时候,编译后直接提示编译失败,提示我的项目里的so文件都找不到了。

implementation 'com.tencent:mmkv:1.0.22'

分析了一下,可能与我项目中使用so库的方式有关,因为我项目中是将so库放在了其他路径下面,因为项目涉及编译不同类型的apk,编译不同的apk会引用不同的so库文件,所以我是放在了lib下面:

 

可以看到我项目里又根据项目的不同引用的不同的so库,最后是在buildgradle中进行统一管理的 

废话不多说了,反正就是各种百度也不起作用,于是索性将mmkv框架里面的代码移植到我的项目里:

 

1,首先先将mmkv项目从git上clone到我本地 ,https://github.com/Tencent/MMKV

2,进行编译,可能会报错,我运行的时候发现gradle版本有问题,所以讲gradle版本升级到最新,并且将AndroidStudio更新到最新4.0.1版本,gradle版本如下:

 

对应的编译版本如下在最外层的buildGradle中:

3,编译之后可能还会报错,我用的10.0的oppo手机,发现报不支持armeabi库的问题,于是修改mmkv模块下的build.gradle文件,去掉了armeabi

4,编译通过后我们找模块mmkv然后编译出so库文件

点击上面的按钮就可以编译出不同版本的so库文件

5,取用自己的so库文件放置到自己项目中所对应的目录中

 我只想要一个静态的so库,所以我只取用了这个so库

6,复制java文件到自己的项目中

将com.tencent.mmkv这个包整个copy到自己项目的java目录下面,如果之间复制到studio上,可能导致前面的com.tencent拷贝不进去,建议直接直接粘在在java这个目录里。如果想要跨进程,aidl下的也要copy到你的项目里。

 注意:copy代码的时候一定要原封不动的将包名copy进去,不然可能出现so库找不到的现象。毕竟jni调用是根据包名寻找对应的方法的。

 7,可能会有某些错误。

BuildConfig.DEBUG换乘至项目的,如果跟我一样,只是想用静态库,完全直接加载mmkv这个库就可以了,上面的if判断都可以去掉。

8,在application初始化的时候,如果你的版本是安卓4.4用的19版本的sdk要做如下判断:

如果你以前项目用的是原来的SharePreference则可以使用 

importFromSharedPreferences将原来的存储方式导入到现在的存储方式
 

这样就可以使用mmtv的功能了,。当然迁移的过程中可能还有其他报错,但都很容易看出来,因为,mmkv整个项目其实都在c层,java层只是做了简单的封装。如果有兴趣,可以研究c层的代码,重点就是mmap映射函数。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值