Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
# MMKV-Kotlin Change Log

- Date format: YYYY-MM-dd
-
## v1.2.18/ 2025-07-06

## v1.3.0 / 2025-09-x05

* Based on `Kotlin 2.2.10`, `MMKV 2.2.3`
* Deprecated all `takeXxx` functions, renamed to `getXxx` to avoid confusion ([issue#29](https://github.com/ctripcorp/mmkv-kotlin/issues/29))

## v1.2.18/ 2025-07-07

* Based on `Kotlin 2.2.0`, `MMKV 2.2.2`
* Fixed a bug of function `initilize()`
* Fixed a bug of function `initilize()` ([issue#44](https://github.com/ctripcorp/mmkv-kotlin/issues/44))
* All overload versions of function `initialize` could pass `null` as their parameter `rootDir`

## v1.2.17/ 2025-04-23
Expand Down
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,22 +116,22 @@ fun demo() {
val kv = defaultMMKV()

kv.set("Boolean", true)
println("Boolean: ${kv.takeBoolean("Boolean")}")
println("Boolean: ${kv.getBoolean("Boolean")}")

kv.set("Int", Int.MIN_VALUE)
println("Int: ${kv.takeInt("Int")}")
println("Int: ${kv.getInt("Int")}")

kv.set("Long", Long.MAX_VALUE)
println("Long: ${kv.takeLong("Long")}")
println("Long: ${kv.getLong("Long")}")

kv.set("Float", -3.14f)
println("Float: ${kv.takeFloat("Float")}")
println("Float: ${kv.getFloat("Float")}")

kv.set("Double", Double.MIN_VALUE)
println("Double: ${kv.takeDouble("Double")}")
println("Double: ${kv.getDouble("Double")}")

kv.set("String", "Hello from mmkv")
println("String: ${kv.takeString("String")}")
println("String: ${kv.getString("String")}")

val bytes = byteArrayOf(
'm'.code.toByte(),
Expand All @@ -140,15 +140,15 @@ fun demo() {
'v'.code.toByte(),
)
kv.set("ByteArray", bytes)
println("ByteArray: ${kv.takeByteArray("ByteArray")?.toString()}")
println("ByteArray: ${kv.getByteArray("ByteArray")?.toString()}")
}
```

- **Deleting & Judging (Whether the key is existed):**

```kotlin
kv.removeValueForKey("Boolean")
println("Boolean: ${kv.takeBoolean("Boolean")}")
println("Boolean: ${kv.getBoolean("Boolean")}")

kv.removeValuesForKeys(listOf("Int", "Long"))
println("allKeys: ${kv.allKeys()}")
Expand Down
16 changes: 8 additions & 8 deletions README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,22 +114,22 @@ fun demo() {
val kv = defaultMMKV()

kv.set("Boolean", true)
println("Boolean: ${kv.takeBoolean("Boolean")}")
println("Boolean: ${kv.getBoolean("Boolean")}")

kv.set("Int", Int.MIN_VALUE)
println("Int: ${kv.takeInt("Int")}")
println("Int: ${kv.getInt("Int")}")

kv.set("Long", Long.MAX_VALUE)
println("Long: ${kv.takeLong("Long")}")
println("Long: ${kv.getLong("Long")}")

kv.set("Float", -3.14f)
println("Float: ${kv.takeFloat("Float")}")
println("Float: ${kv.getFloat("Float")}")

kv.set("Double", Double.MIN_VALUE)
println("Double: ${kv.takeDouble("Double")}")
println("Double: ${kv.getDouble("Double")}")

kv.set("String", "Hello from mmkv")
println("String: ${kv.takeString("String")}")
println("String: ${kv.getString("String")}")

val bytes = byteArrayOf(
'm'.code.toByte(),
Expand All @@ -138,15 +138,15 @@ fun demo() {
'v'.code.toByte(),
)
kv.set("ByteArray", bytes)
println("ByteArray: ${kv.takeByteArray("ByteArray")?.toString()}")
println("ByteArray: ${kv.getByteArray("ByteArray")?.toString()}")
}
```

- **删除 & 判断键是否存在:**

```kotlin
kv.removeValueForKey("Boolean")
println("Boolean: ${kv.takeBoolean("Boolean")}")
println("Boolean: ${kv.getBoolean("Boolean")}")

kv.removeValuesForKeys(listOf("Int", "Long"))
println("allKeys: ${kv.allKeys()}")
Expand Down
14 changes: 6 additions & 8 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
[versions]

kotlin = "2.2.0"
agp = "8.10.1"
mmkv = "2.2.2"
kotlin = "2.2.10"
agp = "8.11.1"
mmkv = "2.2.3"
junit = "4.13.2"
androidx-test = "1.6.1"
androidx-test-runner = "1.6.2"
desugar-jdk-libs = "2.1.5"
vanniktech-maven-publish = "0.33.0"
androidx-test = "1.7.0"
androidx-test-runner = "1.7.0"
vanniktech-maven-publish = "0.34.0"

[libraries]

Expand All @@ -16,7 +15,6 @@ junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-test-core = { group = "androidx.test", name = "core", version.ref = "androidx-test" }
androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "androidx-test-runner" }
androidx-test-rules = { group = "androidx.test", name = "rules", version.ref = "androidx-test" }
desugar-jdk-libs = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar-jdk-libs" }

[plugins]

Expand Down
4 changes: 2 additions & 2 deletions mmkv-kotlin/MMKV_Kotlin.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |spec|
spec.name = 'mmkv_kotlin'
spec.version = '1.2.18'
spec.version = '1.3.0'
spec.homepage = 'Link to the Shared Module homepage'
spec.source = { :http=> ''}
spec.authors = ''
Expand All @@ -10,7 +10,7 @@ Pod::Spec.new do |spec|
spec.libraries = 'c++'
spec.ios.deployment_target = '13.0'
spec.osx.deployment_target = '10.15'
spec.dependency 'MMKV', '2.2.2'
spec.dependency 'MMKV', '2.2.3'

if !Dir.exist?('build/cocoapods/framework/MMKV_Kotlin.framework') || Dir.empty?('build/cocoapods/framework/MMKV_Kotlin.framework')
raise "
Expand Down
11 changes: 2 additions & 9 deletions mmkv-kotlin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ plugins {
alias(libs.plugins.vanniktech.maven.publish)
}

version = "1.2.18"
version = "1.3.0"
group = "com.ctrip.flight.mmkv"

@OptIn(ExperimentalKotlinGradlePluginApi::class)
Expand Down Expand Up @@ -66,18 +66,11 @@ kotlin {

android {
namespace = "com.ctrip.flight.mmkv"
compileSdk = 35
compileSdk = 36
defaultConfig {
minSdk = 23
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
compileOptions {
isCoreLibraryDesugaringEnabled = true
}
}

dependencies {
coreLibraryDesugaring(libs.desugar.jdk.libs)
}

mavenPublishing {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,18 +90,18 @@ class MMKVKotlinTestAndroid {
val result = androidMMKV.set("Parcelable", testParcelable0)
assertEquals(true, result)

val value0 = androidMMKV.takeParcelable("Parcelable", null, TestParcelable::class)
val value0 = androidMMKV.getParcelable("Parcelable", null, TestParcelable::class)
assertEquals(testParcelable0, value0)

val value1 = androidMMKV.takeParcelable(MMKVKotlinTest.KEY_NOT_EXIST, null, TestParcelable::class)
val value1 = androidMMKV.getParcelable(MMKVKotlinTest.KEY_NOT_EXIST, null, TestParcelable::class)
assertEquals(null, value1)

val testParcelable1 = TestParcelable(
id = 2,
name = "Jerry",
height = 180.0f,
)
val value2 = androidMMKV.takeParcelable(MMKVKotlinTest.KEY_NOT_EXIST, testParcelable1, TestParcelable::class)
val value2 = androidMMKV.getParcelable(MMKVKotlinTest.KEY_NOT_EXIST, testParcelable1, TestParcelable::class)
assertEquals(testParcelable1, value2)
}

Expand All @@ -115,7 +115,7 @@ class MMKVKotlinTestAndroid {
context.startService(intent)

SystemClock.sleep(1000 * 3)
val intValue = mmkv.takeInt(MMKVTestService.SharedMMKVKey)
val intValue = mmkv.getInt(MMKVTestService.SharedMMKVKey)
assertEquals(1024 + 1, intValue)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class MMKVTestService : Service() {
val cmd = intent.getStringExtra(CMD_Key)
when (cmd) {
CMD_Update -> {
val value = mmkv.takeInt(SharedMMKVKey)
val value = mmkv.getInt(SharedMMKVKey)
mmkv[SharedMMKVKey] = value + 1
}
CMD_Lock -> mmkv.lock()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,18 @@ import kotlin.reflect.KClass

operator fun MMKVImpl.set(key: String, value: Parcelable?) = platformMMKV.encode(key, value)

fun <T : Parcelable> MMKVImpl.takeParcelable(
fun <T : Parcelable> MMKVImpl.getParcelable(
key: String,
default: T? = null,
clazz: KClass<T>? = null,
): T? = platformMMKV.decodeParcelable(key, clazz?.java, default)

@Deprecated(
message = "Renamed to 'getParcelable' for clarity, as the 'take' prefix could be confusing.",
replaceWith = ReplaceWith("getParcelable(key, default, clazz)")
)
fun <T : Parcelable> MMKVImpl.takeParcelable(
key: String,
default: T? = null,
clazz: KClass<T>? = null,
): T? = getParcelable(key, default, clazz)
Original file line number Diff line number Diff line change
Expand Up @@ -53,26 +53,86 @@ class MMKVImpl internal constructor(internal val platformMMKV: MMKV) : MMKV_KMP
* Read value
*/

@Deprecated(
message = "Renamed to 'getString' for clarity, as the 'take' prefix could be confusing.",
replaceWith = ReplaceWith("getString(key, default)")
)
override fun takeString(key: String, default: String): String = platformMMKV.decodeString(key, default) ?: default

override fun takeBoolean(key: String, default: Boolean): Boolean = platformMMKV.decodeBool(key ,default)
@Deprecated(
message = "Renamed to 'getBoolean' for clarity, as the 'take' prefix could be confusing.",
replaceWith = ReplaceWith("getBoolean(key, default)")
)
override fun takeBoolean(key: String, default: Boolean): Boolean = platformMMKV.decodeBool(key, default)

@Deprecated(
message = "Renamed to 'getInt' for clarity, as the 'take' prefix could be confusing.",
replaceWith = ReplaceWith("getInt(key, default)")
)
override fun takeInt(key: String, default: Int): Int = platformMMKV.decodeInt(key, default)

@Deprecated(
message = "Renamed to 'getLong' for clarity, as the 'take' prefix could be confusing.",
replaceWith = ReplaceWith("getLong(key, default)")
)
override fun takeLong(key: String, default: Long): Long = platformMMKV.decodeLong(key, default)

@Deprecated(
message = "Renamed to 'getFloat' for clarity, as the 'take' prefix could be confusing.",
replaceWith = ReplaceWith("getFloat(key, default)")
)
override fun takeFloat(key: String, default: Float): Float = platformMMKV.decodeFloat(key, default)

@Deprecated(
message = "Renamed to 'getDouble' for clarity, as the 'take' prefix could be confusing.",
replaceWith = ReplaceWith("getDouble(key, default)")
)
override fun takeDouble(key: String, default: Double): Double = platformMMKV.decodeDouble(key, default)

@Deprecated(
message = "Renamed to 'getByteArray' for clarity, as the 'take' prefix could be confusing.",
replaceWith = ReplaceWith("getByteArray(key, default)")
)
override fun takeByteArray(key: String, default: ByteArray?): ByteArray? = platformMMKV.decodeBytes(key, default)

@Deprecated(
message = "Renamed to 'getUInt' for clarity, as the 'take' prefix could be confusing.",
replaceWith = ReplaceWith("getUInt(key, default)")
)
override fun takeUInt(key: String, default: UInt): UInt = platformMMKV.decodeInt(key, default.toInt()).toUInt()

@Deprecated(
message = "Renamed to 'getULong' for clarity, as the 'take' prefix could be confusing.",
replaceWith = ReplaceWith("getULong(key, default)")
)
override fun takeULong(key: String, default: ULong): ULong = platformMMKV.decodeLong(key, default.toLong()).toULong()

@Deprecated(
message = "Renamed to 'getStringSet' for clarity, as the 'take' prefix could be confusing.",
replaceWith = ReplaceWith("getStringSet(key, default)")
)
override fun takeStringSet(key: String, default: Set<String>?): Set<String>? = platformMMKV.decodeStringSet(key, default)

override fun getString(key: String, default: String): String = platformMMKV.decodeString(key, default) ?: default

override fun getBoolean(key: String, default: Boolean): Boolean = platformMMKV.getBoolean(key, default)

override fun getInt(key: String, default: Int): Int = platformMMKV.decodeInt(key, default)

override fun getLong(key: String, default: Long): Long = platformMMKV.decodeLong(key, default)

override fun getFloat(key: String, default: Float): Float = platformMMKV.decodeFloat(key, default)

override fun getDouble(key: String, default: Double): Double = platformMMKV.decodeDouble(key, default)

override fun getByteArray(key: String, default: ByteArray?): ByteArray? = platformMMKV.decodeBytes(key, default)

override fun getUInt(key: String, default: UInt): UInt = platformMMKV.decodeInt(key, default.toInt()).toUInt()

override fun getULong(key: String, default: ULong): ULong = platformMMKV.decodeLong(key, default.toLong()).toULong()

override fun getStringSet(key: String, default: Set<String>?): Set<String>? = platformMMKV.decodeStringSet(key, default)

/**
* Remove value
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,20 @@ operator fun MMKVImpl.set(key: String, value: NSDate) = platformMMKV.setDate(val

operator fun MMKVImpl.set(key: String, value: NSObject?) = platformMMKV.setObject(value, key)

fun MMKVImpl.takeNSDate(key: String, default: NSDate? = null): NSDate? = platformMMKV.getDateForKey(key, default)
fun MMKVImpl.getNSDate(key: String, default: NSDate? = null): NSDate? = platformMMKV.getDateForKey(key, default)

@OptIn(BetaInteropApi::class)
fun MMKVImpl.takeObject(key: String, cls: ObjCClass): Any? = platformMMKV.getObjectOfClass(cls, key)
fun MMKVImpl.getObject(key: String, cls: ObjCClass): Any? = platformMMKV.getObjectOfClass(cls, key)

@Deprecated(
message = "Renamed to 'getNSDate' for clarity, as the 'take' prefix could be confusing.",
replaceWith = ReplaceWith("getNSDate(key, default)")
)
fun MMKVImpl.takeNSDate(key: String, default: NSDate? = null): NSDate? = getNSDate(key, default)

@OptIn(BetaInteropApi::class)
@Deprecated(
message = "Renamed to 'getObject' for clarity, as the 'take' prefix could be confusing.",
replaceWith = ReplaceWith("getObject(key, cls)")
)
fun MMKVImpl.takeObject(key: String, cls: ObjCClass): Any? = getObject(key, cls)
Loading
Loading