KMP初学day02
1、expect actual
例如我要一个获取电池电量的功能,但是各个平台的获取电量实现是不一样的。
这时就要在shared/src/commonMain/kotlin/(包名)目录下新建expect
expect想当于一个抽象的接口,理解成字面意思,期待,期待各个平台下面有真实(actual)的实现。expect可以是一个类、可以是一个方法、可以是一个变量。
2、如何新建
(1)定义expect
shared/src/commonMain/kotlin/(包名)下新建一个kotlin文件
可以是类、函数或者变量都行,然后在定义前面加上expect关键字,如图所示:

(2)创建actual(具体实现)
看到上面expect有红色波浪线,代表还没实现expect。Alt + Enter 创建缺少的actual。

然后Shift + ↓ 选择需要的实现,比如这里选了androidMain、jvmMain、nativeMain(包括ios),一般这三个就可以覆盖所有实现了。

创建的actual分别位于shared/src/androidMain、shared/src/jvmMain、shared/src/nativeMain里面。
然后就是酷酷一顿实现了。
3、例子:
如下图所示,这个类用于管理电池相关的功能
点击左边的"A",可以看到各个平台下面的actual在哪里,并跳转。

各个平台下面的actual目录在:
ios:shared/src/iosMain也有可能在shared/src/nativeMain(因为ios也属于native层); desktop:shared/src/jvmMain/;android:androidMain
可以看下这个例子中,各个平台怎么写的:
(1)desktop平台

补充:这里SystemInfo是oshi库里面的功能,这个库是给jvm平台用的获取系统一些属性用的。
需要在gradle/libs.versions.toml 定义库,和shared/build.gradle.kts中添加jvm相关的依赖
gradle/libs.versions.toml
[versions]
...
oshiCore = "6.2.2"
[libraries]
...
oshi-core = { module = "com.github.oshi:oshi-core", version.ref = "oshiCore" }
[plugins]
...
shared/build.gradle.kts
sourceSets {
androidMain.dependencies {
...
}
commonMain.dependencies {
...
}
commonTest.dependencies {
...
}
// 这里新增
jvmMain.dependencies {
implementation(libs.oshi.core)
}
}
(2)android平台

(3)native平台

更多推荐



所有评论(0)