告别需要定义key的烦恼,几行代码轻松接入使用,支持 sharedpreferencemmkv 等持久化方案,支持跨模块调用
工程根目录build.gradle添加
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("com.wrbug.kv:kv-gradle:${kvVersion}")
}
}
宿主工程和module build.gradle添加
//plugin仅宿主工程启用即可
apply plugin: 'com.wrbug.kv.gradle'
dependencies {
implementation "com.wrbug.kv:kv:${kvVersion}"
kapt "com.wrbug.kv:kv-compile:${kvVersion}"
}
@KVMultiModule
classApp : Application() {
overridefunonCreate() {
super.onCreate()
KV.init(this)
}
}@KVMultiModule 仅用于标记主工程,可以在主工程任意类添加该注解
@KV
interfaceAccountLocalSource {
funsetUsername(username:String)
fungetUsername():StringfunsetAge(age:Int)
fungetAge(defaultAge:Int):IntfunremoveUsername()
funclear()
}定义规则参考Interface方法名匹配规则
//获取AccountLocalSource实例val source =KV.get(AccountLocalSource::class.java)
//存储id
source?.setUsername("WrBug")
//获取idval username=source?.getUsername()
//删除username
source?.removeUsername()
//支持自定义key,scope,key默认为类名,scope默认为空字符串
@KV("key",scope="scope")
interfaceAccountLocalSource {
//@KVAliasName可自定义持久化key
@KVAliasName("uid")
funsetUserId(uid:Long)
//匹配set开头的方法,xxx为持久化的key//传参仅支持一个,可以为任意类型,复杂对象类型通过 ObjectConverter 转换为可存储类型funsetXXX(username:String)
//匹配@KVPut注解
@KVPut("xxx")
funsaveXXX(obj:Any)
//匹配get开头的方法,xxx为持久化的key,返回类型应与set方法传参一致fungetXXX():String//get方法支持默认值fungetXXX(defaultAge:Int):Int//匹配@KVGet注解
@KVGet("xxx")
funfetchXXX():Any//匹配remove方法,移除该keyfunremoveXXX()
@KVRemove("xxx")
fundeleteXXX()
//匹配clear方法,清空所有数据funclear()
@KVClear
funremoveAll()
}DataProvider用于实现储存策略。默认SharedPreferenceDataProvider 使用SharedPreference储存,业务方可以根据需要自行实现DataProvider,目前仅支持一个自定义DataProvider
@KVDataProvider
classCustomDataProvider : DataProvider{
//impl
}Demo 提供了MMKVDataProvider的实现可供参考
ObjectConverter用于对复杂对象存储转换,默认使用JsonObjectConverter转为json存储
object CustomObjectConverter : ObjectConverter {
//impl
}
//应在初始化完成后设置KV.setObjectConverter(CustomObjectConverter)