介绍
MMKV 是一个基于 mmap 的高性能 key-value 存储库,主要用于解决 SharedPreferences 存储性能和容量受限的问题
特性
-
🚀 特性1
提供MMKV初始化接口
-
🚀 特性2
加密key-value
-
💪 特性3
存取key-value值
-
🛠️ 特性4
获取内存相关信息
-
🌍 特性5
清理删除关闭
-
💡 特性6
上锁解锁
-
🚀 特性1
获取mmkv根路径
-
🚀 特性2
备份和恢复mmkv实例
-
💪 特性3
内容更改和故障处理
-
🛠️ 特性4
log打印处理
-
🌍 特性5
检测MMKV文件是否有效
软件架构
源码目录
.
├─ doc
│ ├─ assets
│ ├─ cjcov
│ └─ feature_api.md
├─ mmkv_cpp
│ ├─ include
│ │ ├─ MemoryFile.h
│ │ ├─ MMBuffer.h
│ │ ├─ MMKV.h
│ │ ├─ MMKVLog.h
│ │ └─ MMKVPredef.h
│ ├─ native-mmkv.cpp
│ └─ native-mmkv.h
├─ README.md
├─ src
│ └─ mmkv
│ ├─ mmkv.cj
│ ├─ MMKVHandler.cj
│ ├─ native.cj
│ └─ util.cj
└─ test
├─ HLT
└─ LLT
doc
文档目录,用于存放设计、API接口等文档mmkv_cpp
native
接口封装src
源码目录test
测试目录
接口说明
主要类和函数接口说明详见 [API] https://gitcode.com/Cangjie-TPC/kv4cj/blob/develop/doc/feature_api.md
使用说明
编译构建
前提:参考 https://github.com/Tencent/MMKV/archive/refs/tags/v1.2.15.tar.gz 官网安装 MMKV
,版本为 V1.2.15
。
MMKV编译
- linux 编译
进入MMKV/Core目录,执行下面语句
var=`awk '/add_library.*/{print NR}' CMakeLists.txt` && sed -i ''"$var"',/STATIC/{s/STATIC/SHARED/}' CMakeLists.txt
cmake -DCMAKE_BUILD_TYPE=Release
make
- winows 编译
下载msys2和mingw64
msys2:https://github.com/msys2/msys2-installer/releases/download/2023-03-18/msys2-x86_64-20230318.exe
mingw64:https://github.com/niXman/mingw-builds-binaries/releases/download/8.5.0-rt_v10-rev0/x86_64-8.5.0-release-posix-seh-rt_v10-rev0.7z
将mingw64解压到msys2的根目录
下载cmake:https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3-windows-x86_64.zip
将cmake解压到D盘
用mingw64进入MMKV/Core目录,执行下面语句
var=`awk '/add_library.*/{print NR}' CMakeLists.txt` && sed -i ''"$var"',/STATIC/{s/STATIC/SHARED/}' CMakeLists.txt
sed -i s/%ws/%ls/g MMKV.cpp MemoryFile_Win32.cpp MMKVPredef.h
"D:\cmake-3.26.3-windows-x86_64\bin\cmake" -DCMAKE_BUILD_TYPE=Release -G "MinGW Makefiles"
make
kv4cj编译
- linux 编译
将上面生成文件 libcore.so
,放入根目录的 lib
文件夹下,之后执行
./build_linux.sh
-
window编译
将上面生成文件 libcore.dll,放入根目录的 lib 文件夹下,之后执行
build_win.bat
功能示例
initializeMMKV功能示例
功能示例描:设定 MMKV 的根目录
示例代码如下:
testExample1.cj
from kv4cj import mmkv.*
main() {
MMKV.initializeMMKV("rootdir")
return 0
}
编译运行:
cjc --import-path build -Lbuild/kv4cj -Llib -lcore -lkv4cj_mmkv -lmymmkv testExample1.cj -o main
执行结果如下:
[I] <MMKV.cpp:165::initialize> version v1.2.15, page size 4096, arch x86_64
[I] <MMKV.cpp:208::initializeMMKV> root dir: rootdir
defaultMMKV功能示例
功能示例描述:创建全局的实例
示例代码如下:
testExample2.cj
import kv4cj.*
main() {
MMKV.initializeMMKV("rootdir")
var mmkv = MMKV.defaultMMKV()
return 0
}
编译运行:
cjc --import-path build -Lbuild/kv4cj -Llib -lcore -lkv4cj_mmkv -lmymmkv testExample2.cj -o main
执行结果如下:
[I] <MMKV.cpp:165::initialize> version v1.2.15, page size 4096, arch x86_64
[I] <MMKV.cpp:208::initializeMMKV> root dir: rootdir
[I] <MemoryFile.cpp:97::open> open fd[0x3], rootdir/mmkv.default
[I] <MemoryFile.cpp:97::open> open fd[0x4], rootdir/mmkv.default.crc
[I] <MMKV_IO.cpp:81::loadFromFile> loading [mmkv.default] with 0 actual size, file size 4096, InterProcess 0, meta info version:0
[I] <MMKV_IO.cpp:130::loadFromFile> loaded [mmkv.default] with 0 key-values
mmkvWithID功能示例
功能示例描述:创建自己的实例
示例代码如下:
testExample3.cj
import kv4cj.*
main() {
MMKV.initializeMMKV("rootdir")
var mmkv = MMKV.mmkvWithID("MyID")
return 0
}
编译运行:
cjc --import-path build -Lbuild/kv4cj -Llib -lcore -lkv4cj_mmkv -lmymmkv testExample3.cj -o main
执行结果如下:
[I] <MMKV.cpp:165::initialize> version v1.2.15, page size 4096, arch x86_64
[I] <MMKV.cpp:208::initializeMMKV> root dir: rootdir
[I] <MemoryFile.cpp:97::open> open fd[0x3], rootdir/MyID
[I] <MemoryFile.cpp:97::open> open fd[0x4], rootdir/MyID.crc
[I] <MMKV_IO.cpp:81::loadFromFile> loading [MyID] with 133 actual size, file size 4096, InterProcess 0, meta info version:3
[I] <MMKV_IO.cpp:86::loadFromFile> loading [MyID] with crc 621142152 sequence 1 version 3
[I] <MMKV_IO.cpp:130::loadFromFile> loaded [MyID] with 3 key-values
存取key-value
功能示例描述:存取key-value
示例代码如下:
testExample4.cj
import kv4cj.*
main() {
MMKV.initializeMMKV("rootdir")
var kv = MMKV.mmkvWithID("MyID")
kv.set("bool", true)
var value = kv.getBool("bool")
kv.set("int32", 0x11223344)
var iValue = kv.getInt32("int32")
kv.set("string", "Hello from mmkv")
var str = kv.getString("string")
return 0
}
编译运行:
cjc --import-path build -Lbuild/kv4cj -Llib -lcore -lkv4cj_mmkv -lmymmkv testExample4.cj -o main
执行结果如下:
[I] <MMKV.cpp:165::initialize> version v1.2.15, page size 4096, arch x86_64
[I] <MMKV.cpp:208::initializeMMKV> root dir: rootdir
[I] <MemoryFile.cpp:97::open> open fd[0x3], rootdir/MyID
[I] <MemoryFile.cpp:97::open> open fd[0x4], rootdir/MyID.crc
[I] <MMKV_IO.cpp:81::loadFromFile> loading [MyID] with 133 actual size, file size 4096, InterProcess 0, meta info version:3
[I] <MMKV_IO.cpp:86::loadFromFile> loading [MyID] with crc 621142152 sequence 1 version 3
[I] <MMKV_IO.cpp:130::loadFromFile> loaded [MyID] with 3 key-values
鸿蒙全栈开发全新学习指南
总是有很多小伙伴反馈说:鸿蒙开发不知道学习哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点? 为了解决大家这些学习烦恼。在这准备了一份很实用的鸿蒙(HarmonyOS NEXT)学习路线与学习文档给大家用来跟着学习。
针对一些列因素,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。
本路线共分为四个阶段:
第一阶段:鸿蒙初中级开发必备技能
第二阶段:鸿蒙南北双向高工技能基础:gitee.com/MNxiaona/733GH
第三阶段:应用开发中高级就业技术
第四阶段:全网首发-工业级南向设备开发就业技术:gitee.com/MNxiaona/733GH
《鸿蒙 (Harmony OS)开发学习手册》(共计892页)
如何快速入门?
1.基本概念
2.构建第一个ArkTS应用
3.……
开发基础知识:gitee.com/MNxiaona/733GH
1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……
基于ArkTS 开发
1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……
鸿蒙开发面试真题(含参考答案):gitee.com/MNxiaona/733GH
OpenHarmony 开发环境搭建
《OpenHarmony源码解析》:gitee.com/MNxiaona/733GH
搭建开发环境
系统架构分析
- 构建子系统
- 启动流程
- 子系统
- 分布式任务调度子系统
- 分布式通信子系统
- 驱动子系统
- ……
OpenHarmony 设备开发学习手册
项目实战开发教学:gitee.com/MNxiaona/733GH
写在最后
- 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
- 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:
gitee.com/MNxiaona/733GH