Compose开发桌面软件(一:项目搭建与入门)

今年对于 Android开发来说不知道该说是好的一年还是不好的一年,尤其是年底鸿蒙的next版本将剔除其ASOP部分代码这一消息。

而鸿蒙也发布了自己的跨平台方案,我也跟随潮流进行了鸿蒙ArkTs的学习,并且发布了几篇文章。

但是虽然鸿蒙现在大热,但是毕竟我还是个Android开发,所以对于 Android的新技术当然也要学习,那就是compose了。

这篇文章不是讲jetpack compose而是compose的跨平台方案:Compose Multiplatform

前言

本文章主要内容还是为翻译官方的使用指南,外加自己的实践操作和总结。

官方指南链接:github.com/JetBrains/c...

按照官方说明,Compose for Desktop 可以为 macOS、Linux 和 Windows 平台生成应用程序。所以这些平台中的任何一个都可以用于本教程。

我个人只尝试了Windows和macOS两个平台。

要求

  • JDK 11 或更高版本
  • IntelliJ IDEA Community Edition 或 Ultimate Edition 2020.3 或更高版本(可以使用其他编辑器,但我们假设您在本教程中使用的是 IntelliJ IDEA)

创建项目

新项目向导

从 2020.3 版本开始,IDEA 中的 Kotlin 支持附带了新建项目向导,它会自动创建一个 Compose 应用程序。

请注意,JDK 必须至少为 JDK 11,要使用本机分发包,必须使用 JDK 15 或更高版本。

因为我是用最新的idea跑的项目,所以截图和官方图并不一样。

点击新建项目,只要你的各个版本和上述要求一样,就会出现专门的模板

然后点create就会开始创建,创建完成如图

默认其实只有一个Main.kt,我的图中多出来的是我后续自己写的。

IDEA插件

如果你想和Android的compose项目一样使用@Preview在右侧预览的话,你需要添加一个插件Compose Multiplatform ,只需要在插件库搜索和安装就行。

更新向导插件

上述向导中使用的 Compose 插件版本可能不是最新的。通过编辑文件并更新版本信息来更新到最新的插件版本,build.gradle.kts如下所示。有关最新版本,请参阅最新版本站点和Kotlin站点。

bash 复制代码
plugins {
    kotlin("jvm") version "1.8.10"
    id("org.jetbrains.compose") version "1.3.1"
}

在没有向导的情况下创建一个新的 Compose 项目

手动创建 Compose 项目。

构建 Compose for Desktop 项目的推荐方法是使用 Gradle。JetBrains 提供了一种使用特殊 Gradle 插件构建 Compose for Desktop 项目的简单方法。

您可以为桌面或多 平台应用程序克隆现有模板,或从头开始创建它。

首先新建一个目录,命名为sample.

bash 复制代码
mkdir sample
cd sample

创建settings.gradle.kts如下:

scss 复制代码
pluginManagement {
    repositories {
        gradlePluginPortal()
        maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
    }
}

然后build.gradle.kts使用以下内容创建:

scss 复制代码
plugins {
    kotlin("jvm") version "1.8.10"
    id("org.jetbrains.compose") version "1.3.1"
}

repositories {
    mavenCentral()
    maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
    google()
}

dependencies {
    implementation(compose.desktop.currentOs)
}

compose.desktop {
    application {
        mainClass = "MainKt"
    }
}

然后创建src/main/kotlin/main.kt并将以下代码放入其中:

ini 复制代码
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.Button
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
import androidx.compose.ui.window.rememberWindowState

fun main() = application {
    Window(
        onCloseRequest = ::exitApplication,
        title = "Compose for Desktop",
        state = rememberWindowState(width = 300.dp, height = 300.dp)
    ) {
        val count = remember { mutableStateOf(0) }
        MaterialTheme {
            Column(Modifier.fillMaxSize(), Arrangement.spacedBy(5.dp)) {
                Button(modifier = Modifier.align(Alignment.CenterHorizontally),
                    onClick = {
                        count.value++
                    }) {
                    Text(if (count.value == 0) "Hello World" else "Clicked ${count.value}!")
                }
                Button(modifier = Modifier.align(Alignment.CenterHorizontally),
                    onClick = {
                        count.value = 0
                    }) {
                    Text("Reset")
                }
            }
        }
    }
}

此方法我并没有去验证,大家可以试试

运行项目

直接点击右上角绿色箭头,运行结果如下:

您可以多次单击该按钮,然后看到应用程序做出反应并更新了 UI。

main()还支持使用 run gutter运行和调试函数。

以上就是使用Compose Multiplatform的项目构建步骤,其中截图均为自己实际项目截图,如文中有错误欢迎指出,共同进步!

相关推荐
淡淡的香烟21 分钟前
Android视频直播播放器简单封装
android·物联网·音视频
爱笑鱼34 分钟前
Android 系统启动机制导读:从 init 到 system_server,谁创建谁?
android
爱笑鱼44 分钟前
Android 系统启动机制(一):init 到底是什么?为什么它不是普通 Native Service?
android
必须会一定会1 小时前
GLM-5.3 迁移实战:强制思考、1M 上下文与官方编程基准
android·开发语言·kotlin
小孔龙1 小时前
Android MessageQueue:从单锁队列到 DeliQueue
android
math_hongfan1 小时前
事务下单与状态流转:ArkTS 的 JOIN 联表在鸿蒙订单里实战
android·学习·华为·harmonyos
嘟哩DuliDuli2 小时前
AI 账单变高的技术原因:重复上下文和用量归属
android·人工智能·安全·ai·软件工程
阿pin16 小时前
Android随笔-kotlin withContext
android·kotlin·withcontext
树码小子17 小时前
开启 IDEA 中的断言功能
android·java·intellij-idea
Kslient17 小时前
HeaderBehavior
android