告别需要定义key的烦恼,几行代码轻松接入使用,支持 sharedpreference mmkv 等持久化方案,支持跨模块调用
KV最新版本: Maven Central
工程根目录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 class App : Application() { override fun onCreate() { super.onCreate() KV.init(this) } }
@KVMultiModule 仅用于标记主工程,可以在主工程任意类添加该注解
@KV interface AccountLocalSource { fun setUsername(username:String) fun getUsername():String fun setAge(age:Int) fun getAge(defaultAge:Int):Int fun removeUsername() fun clear() }
定义规则参考Interface方法名匹配规则
//获取AccountLocalSource实例 val source = KV.get(AccountLocalSource::class.java) //存储id source?.setUsername("WrBug") //获取id val username=source?.getUsername() //删除username source?.removeUsername()
//支持自定义key,scope,key默认为类名,scope默认为空字符串 @KV("key",scope="scope") interface AccountLocalSource { //@KVAliasName可自定义持久化key @KVAliasName("uid") fun setUserId(uid:Long) //匹配set开头的方法,xxx为持久化的key //传参仅支持一个,可以为任意类型,复杂对象类型通过 ObjectConverter 转换为可存储类型 fun setXXX(username:String) //匹配@KVPut注解 @KVPut("xxx") fun saveXXX(obj:Any) //匹配get开头的方法,xxx为持久化的key,返回类型应与set方法传参一致 fun getXXX():String //get方法支持默认值 fun getXXX(defaultAge:Int):Int //匹配@KVGet注解 @KVGet("xxx") fun fetchXXX():Any //匹配remove方法,移除该key fun removeXXX() @KVRemove("xxx") fun deleteXXX() //匹配clear方法,清空所有数据 fun clear() @KVClear fun removeAll() }
DataProvider用于实现储存策略。默认SharedPreferenceDataProvider 使用SharedPreference储存,业务方可以根据需要自行实现DataProvider,目前仅支持一个自定义DataProvider
@KVDataProvider class CustomDataProvider : DataProvider{ //impl }
Demo 提供了MMKVDataProvider的实现可供参考
ObjectConverter用于对复杂对象存储转换,默认使用JsonObjectConverter转为json存储
object CustomObjectConverter : ObjectConverter { //impl } //应在初始化完成后设置 KV.setObjectConverter(CustomObjectConverter)