了解 Kotlin/Wasm | 开发者说·DTalk

本文介绍了Kotlin/Wasm技术,如何将其与Kotlin结合用于Web开发,提供了在IntelliJIDEA中启用和创建Kotlin/Wasm项目的步骤,并展示了如何在Web浏览器中运行和体验ComposeforWeb的优化。同时提到了compose-wasm-canvas在解决Web应用割裂问题上的进展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

87105c94171e747f575f88bd5f62a984.jpeg

本文原作者: 黄林晴,原文发布于: Android技术圈

c6a69a54db6ef274309be62ae91ed68b.png

了解 Kotlin/Wasm

是什么

Kotlin/Wasm 是将 Kotlin 编译为 WebAssembly (Wasm) 的工具链。那 WebAssembly 又是什么呢?

WebAssembly 是一种低级字节码格式,可以在 Web 浏览器中运行,并且具有比 JavaScript 更快的执行速度和更好的跨平台兼容性。

可以做什么

使用 Kotlin/Wasm,我们可以使用 Kotlin 编写 Web 应用程序,然后将其编译为 Wasm 字节码,以在 Web 浏览器中运行。这样我们就可以在单个代码库中使用相同的语言和工具来开发应用程序,而不必学习 JavaScript 等其他语言。此外,由于 Wasm 字节码是一种跨平台格式,因此应用程序可以在各种操作系统和设备上运行,而不必重新编写代码。

简单的说

总之,Kotlin/Wasm 是一种新兴的技术,可以让开发人员使用 Kotlin 编写 Web 应用程序,并在 Web 浏览器中运行。这可以使开发更加简单和高效,并提供更好的跨平台兼容性和更快的执行速度。

Kotlin/Wasm 是从 Kotlin 1.8.20 版本开始支持的,当前处于实验阶段。

6ac75dad94030279c3b221fcc40136b6.png

体验 Kotlin/Wasm

启用 WASM

我们使用最新版本的 IntelliJ IDEA,先随便打开一个项目,双击 Shift,在弹出的搜索中输入 Registry

7a7fcdd6cfddd521a7b0aabfe49ebdc8.png

选中并回车,在弹出的窗口中找到 Kotlin.wasm.wizard,勾选此选项。

7dd688deb5faf9fd1e3ff1f46e30ce16.png

然后 IDEA 会提示我们重启,重启后,就启用了 wasm。之后,我们就可以通过 IDEA 创建 Kotlin/Wasm 项目。

创建 Kotlin/Wasm 项目

打开 IDEA,创建 Kotlin Multiplatform 项目,选择 Browser Application with Kotlin/Wasm,如下图所示。

2cb81bf759a62d8d3b10e87505209cb7.png

默认情况下,项目将使用带有 Kotlin DSL 的 Gradle 作为构建系统。创建好项目后,在 wasmMain 目录下为我们创建了 Simple.kt 文件,如下图所示。

c587a94d04a3a99c0b5542af2212edab.png

此外,由于 Kotlin/Wasm 是从 1.8.20 版本新增的,所以我们要确保配置文件中的版本号是正确的。

plugins {
    kotlin("multiplatform") version "1.8.20"
}

运行程序

点击运行程序,运行后在浏览器输入框中输入 http://localhost:8080/,如下图所示。

40bf97985d7539af09c2a7c1a807d931.png

这里我使用的是 Chrome 浏览器,需要在 Chrome 中输入 chrome://flags/#enable-webassembly-garbage-collection,然后启用 WebAssembly Garbage Collection,这一点需要注意下。

52710ccd2f3bd7dc383de2e659ed5140.png

Hello World 程序运行之后,我们可以修改自己想要展示的文字,比如修改代码如下所示: 

fun main() {
    document.body?.appendText("Hello, first Kotlin/Wasm Project!")
}

运行程序,如下图所示。

35f5dd3265d86c03fa13fd2aeedae260.jpeg

Kotlin/Wasm 可以使用来自 Kotlin 的 JavaScript 代码和来自 JavaScript 的 Kotlin 代码。也就是 Kotlin 和 JavaScript 是可以互相操作的。这并不是我们的重点,这里就不演示了。

8aa63032bbbc0313a1aaf48a187a909e.png

体验 Wasm 版本的

Compose for Web

Kotlin/Wasm 在 Web 浏览器中可以实现更高性能和低延迟的计算机程序。

当前依赖于 Kotlin/Wasm 的 "compose-wasm-canvas" 已经在实验阶段,而 "compose-wasm-canvas" 基本可以解决我们之前所体验到的割裂问题。我们来一起体验一下。

项目配置

由于 "compose-wasm-canvas" 还处于实验阶段,所以我们在确保版本号、配置可用,修改配置文件代码如下所示: 

kotlin.version=1.8.20
org.jetbrains.compose.experimental.jscanvas.enabled=true
compose.version=1.4.0-dev-wasm06

代码编写

@OptIn(ExperimentalComposeUiApi::class)
fun main() {
    CanvasBasedWindow {
        LoginUi()
    }
}

外层使用 CanvasBasedWindow 包裹,test 就是我们自己写的 Compose 代码,这里我们两个输入框和一个登陆按钮,代码如下所示: 

@Composable
fun LoginUI() {


    var username by remember { mutableStateOf("") }
    var password by remember { mutableStateOf("") }


    Column(
        modifier = Modifier
            .fillMaxWidth()
            .padding(16.dp)
    ) {
        OutlinedTextField(
            value = username,
            onValueChange = { username = it },
            label = { Text("userName") },
            placeholder = { Text("input userName") },
            modifier = Modifier.fillMaxWidth()
        )


        OutlinedTextField(
            value = password,
            onValueChange = { password = it },
            label = { Text("password") },
            placeholder = { Text("input password") },
            visualTransformation = PasswordVisualTransformation(),
            modifier = Modifier
                .fillMaxWidth()
                .padding(top = 8.dp)
        )


        Button(onClick = {
           //login
        }) {
            Text("Login")
        }
    }
}

这就是和 Android 中 Compose 完全一样的代码,运行程序,结果如下图所示。

3b7efcc6087d421922c3dca54f9cb851.jpeg

9c5e390cdd37640538fe52e0f8cfaf29.png

总结

"compose-wasm-canvas" 与 "compose-html" 完全不同,并且解决了 Compose for Web 中严重的割裂问题,不过,不管是 "compose-wasm-canvas" 还是 Kotlin/Wasm 都还处于早期的实验性阶段,什么时候发布 Alpha 甚至是 Beta 版本,是个未知数,让我们一起期待吧~


长按右侧二维码

查看更多开发者精彩分享

36df77eb5d14d74fe66437191da03c84.png

"开发者说·DTalk" 面向1329a9c4b29cb05cf3fa4f268cf5277d.png中国开发者们征集 Google 移动应用 (apps & games) 相关的产品/技术内容。欢迎大家前来分享您对移动应用的行业洞察或见解、移动开发过程中的心得或新发现、以及应用出海的实战经验总结和相关产品的使用反馈等。我们由衷地希望可以给这些出众的中国开发者们提供更好展现自己、充分发挥自己特长的平台。我们将通过大家的技术内容着重选出优秀案例进行谷歌开发技术专家 (GDE) 的推荐。

ba8a7b3a406bf2a12fc32d6bb6a7cef1.gif 点击屏末 | 阅读原文 | 即刻报名参与 "开发者说·DTalk" 


c2b0684c7f57e26abc803bb9e8fef749.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值