compose multiplatform 常用库

目录

权限

log

toast

webview

http请求

原子操作

数据库

lifecycle

时间

序列化


multiplatform中,旧的库不可用了.需要新的库,新的库,目前不算多,比起其它多平台略少了.

这里介绍一些常用的.

Klibs.io --- Search 2200+ KMP projects

Compose Libraries

这两个网站搜索相应的库.

权限

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 })
        }
    }
}
相关推荐
mmsx26 分钟前
Android 本地优先的三级语义理解降级链
android·数码相机·策略模式
朱涛的自习室31 分钟前
我让 Gemini 4 当高管、DeepSeek 当员工,开了一家软件公司(Day 1)
android·前端·人工智能
事圆则缓1 小时前
Android 中的 Socket 和 WebSocket:从一条聊天消息看清区别
android·websocket·网络协议
mmsx2 小时前
Android 流式对话实现:分层门面与 SSE 手工解析
android·github·sse
墨狂之逸才3 小时前
Android扫码异常排查小白教程
android
恋猫de小郭3 小时前
Kotlin 2.5 的 Companion 改造,对 KMP 的重要升级
android·前端·flutter
Kapaseker4 小时前
写了这么久 Kotlin,你真的理解 in、out 和 * 吗?
android·kotlin
小七在进步4 小时前
C++内存管理:new/delete vs malloc/free深度解析
android·java·c++
geovindu18 小时前
sql:Search-Optimized SQL Queries using mysql 9.0
android·数据库·sql·mysql·数据库开发·数据库架构
知之则吱吱19 小时前
Android 开发者验证机制迎来新变化:核心要求、实施时间与开发者应对指南
android·google