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 })
        }
    }
}
相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen1 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone1 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui