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 })
        }
    }
}
相关推荐
三少爷的鞋9 小时前
Android 架构七条铁律:架构师真正设计的不是代码,而是秩序
android
xiangxiongfly91510 小时前
Android GsonFactory总结
android·gson·gsonfactory
WythePlus12 小时前
Android 14 SELinux策略深度解析
android·安全策略·selinux策略
俩个逗号。。16 小时前
Kotlin flow 详解
android·开发语言·kotlin
橙光成长18 小时前
android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送
android·1024程序员节
深圳雨林凯AI18 小时前
图案裂变的底色衰减:alpha通道、亮度对比与白墨分色的量化拆解
android
mmsx18 小时前
Android 模块化收口:能力组合框架、手写 LifecycleOwner 与热修复共存
android
恋猫de小郭20 小时前
Flutter 可以更直接地调用原生 API 了,Dart Direct Native Interop
android·前端·flutter
2501_9160088921 小时前
iPhone 设备信息查看,用 KeyMob 看型号、序列号、电池健康和 UDID
android·ios·小程序·https·uni-app·iphone·webview
好的佩奇1 天前
蓝牙之通信架构
android·flutter·蓝牙