目录
multiplatform中,旧的库不可用了.需要新的库,新的库,目前不算多,比起其它多平台略少了.
这里介绍一些常用的.
Klibs.io --- Search 2200+ KMP projects
这两个网站搜索相应的库.
权限
acccompanist,这个不支持多平台的. calf这个可以com.mohamedrejeb.calf:calf-permissions, calf还有其它功能,比如选文件,可以去github上找到这个,都是支持多平台的.用法是差不多的.
log
我用了几个,发现de.peilicke.sascha", name = "log4k 这个是比较合适的,不需要初始化,静态方法直接调用.
toast
这个我用alert-kmp = { module = "io.github.khubaibkhan4:alert-kmp", version.ref = "alertKmp" }
webview
我用compose-webview = { group = "io.github.kevinnzou", name = "compose-webview-multiplatform", version.ref = "webview" }
http请求
okhttp是不行了,但可以作为后端去替换.官方库ktor功能比较全面,毕竟是基础功能,可以配置okhttp3后端,当然还有很多可用的,区分可以从官网上找.
ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktorVersion" }
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktorVersion" }
ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktorVersion" }
ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktorVersion" }
原子操作
java有,kotlin就要用其它库了.kotlinx-atomicfu = { module = "org.jetbrains.kotlinx:atomicfu", version.ref = "atomicfu" }
数据库
之前用过sqldelight,这个使用不方便,不够对象化,谷歌已经把room支持多平台了,所以继续用room,需要具体的依赖实现:sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "sqlite" }
lifecycle
这个是移动端已经支持了,但需要换,不能用androidx.要用org.jetbrains.androidx.lifecycle:比如
androidx-lifecycle-viewmodel-compose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }
时间
java的时间也不能用了.换kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinxDatetime" }
序列化
gson这些不能用了,换ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktorVersion" },这个相对麻烦一点,每个类要声明一下,引入插件,但解析自定义的type比gson容易的多.需要注意配置
val jsonParser = Json {
ignoreUnknownKeys = true
}
如果要自定义,稍微麻烦一些,
Int?类型:obj.get("pack_id")?.jsonPrimitive?.int ?: 0
String?类型:obj.get("country")?.jsonPrimitive?.content
构建一个jsonarray:
val array = buildJsonArray {
if (integers != null) {
var info: Int
for (i in integers.indices) {
info = integers[i]
add(buildJsonObject { info })
}
}
}