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平台

Logo

一站式 AI 云服务平台

更多推荐