【Compose multiplatform教程】01 创建你的多平台项目 <官网搬运>

这是 "创建带有共享逻辑和用户界面的 Compose 多平台应用" 教程的第一部分。

第一步:创建你的多平台项目

第二步:探究可组合代码

第三步:修改项目

第四步:创建你自己的应用程序

在这里,你将学习如何使用 Kotlin 多平台网络向导和 Android Studio 来创建并运行你的首个 Compose 多平台应用程序。

借助 Compose 多平台用户界面框架,你能够将 Kotlin 多平台的代码共享能力拓展到应用逻辑之外。你可以一次性实现用户界面,然后将其应用于 Compose 多平台所支持的所有平台。

在本教程中,你将构建一个可在安卓、iOS、桌面端以及网页端运行的示例应用程序。为了创建用户界面,你将使用 Compose 多平台框架,并学习它的基础知识,包括可组合函数、主题、布局、事件以及修饰符。

本教程的注意事项:

无需事先具备 Compose 多平台、安卓或 iOS 方面的经验。不过我们建议你在开始之前先熟悉 Kotlin 的基础知识。

要完成本教程,你只需要用到 Android Studio。它能让你在安卓和桌面端尝试多平台开发。对于 iOS 开发,你需要一台装有 Xcode 的 macOS 电脑,这是 iOS 开发的一个普遍限制条件。

如果你愿意,可以只选择你感兴趣的特定平台,而忽略其他平台。

若想尝试全新的多平台开发体验,又不想在不同的集成开发环境之间来回切换以及为编写 Swift 代码而打开 Xcode,不妨看看 JetBrains Fleet 是如何处理多平台项目的。

搭建环境

如果你还没有查看过关于为 Kotlin 多平台开发搭建环境的文章,那就去看看吧。确保你已完成以下事项:

为 Android Studio 安装 Kotlin 多平台插件。

如果你计划构建 iOS 应用程序,至少启动一次 Xcode 并接受使用条款。

运行 Kdoctor 来检查搭建过程中是否存在问题。

以下操作指南假定你已具备针对目标平台所需的全部软件。

使用向导创建项目

首先,创建一个示例项目。使用 Kotlin 多平台网络向导来创建是最佳途径:

1: 打开 Kotlin 多平台向导。

html 复制代码
https://kmp.jetbrains.com/?_gl=1*hamo2k*_gcl_au*MjA1NzI5MjMzNC4xNzMzNjUxODIw*_ga*MTgxMDU5NDAzNC4xNzA4MjIzNzEz*_ga_9J976DJZ68*MTczMzY1NzM1MC41LjEuMTczMzY1NzM4NC4yNi4wLjA.

2:在 "新建项目" 选项卡中,将项目名称更改为 "ComposeDemo",项目 ID 更改为 "compose.project.demo"。

3:选择 "安卓""桌面端" 以及 "网页" 选项。

4:如果你使用的是 Mac 电脑,也要选择 "iOS" 选项。确保选中 "共享用户界面" 选项。

5:点击 "下载" 按钮,然后解压生成的压缩包。

编写代码。

检查项目结构

1:启动 Android Studio。

2:在欢迎界面,点击 "打开",或者在编辑器中选择 "文件"->"打开"。

3:导航至解压后的 "ComposeDemo" 文件夹,然后点击 "打开"。Android Studio 会检测到该文件夹包含一个 Gradle 构建文件,并将该文件夹作为新项目打开。

如果你在向导中没有选择 "iOS" 选项,那么你将不会看到名称以 "ios" 或 "apple" 开头的文件夹。

Android Studio 中的默认视图是针对安卓开发进行优化的。要查看更便于多平台开发的项目完整文件结构,需将视图从 "android" 切换为 "project"。

4:点击"Open"后出现"Cannot resolve module"错误怎么解决?

在Android Studio中如何切换到"项目"视图?

如何在Android Studio中运行一个Compose项目?

该项目包含两个模块:

"composeApp" 是一个 Kotlin 模块,它包含了安卓、桌面端、iOS 以及网页应用之间共享的逻辑 ------ 也就是可用于所有平台的代码。它使用 Gradle 作为构建系统,Gradle 有助于实现构建流程的自动化。

"iosApp" 是一个 Xcode 项目,其构建结果为一个 iOS 应用程序。它依赖 "composeApp" 这个共享模块,并将其作为一个 iOS 框架来使用。

"composeApp" 模块由以下源集组成:"androidMain"、"commonMain"、"desktopMain"、"iosMain" 以及 "wasmJsMain"。源集是 Gradle 中的一个概念,指的是逻辑上分组在一起的若干文件,每个组都有其自身的依赖关系。在 Kotlin 多平台中,不同的源集可针对不同的平台。

"commonMain" 源集使用通用的 Kotlin 代码,而各个平台源集则使用特定于每个目标平台的 Kotlin 代码。"Kotlin/JVM" 用于 "androidMain" 和 "desktopMain" 源集;"Kotlin/Native" 用于 "iosMain" 源集;另一方面,"Kotlin/Wasm" 用于 "wasmJsMain" 源集。

当共享模块被构建为安卓库时,通用的 Kotlin 代码会被当作 "Kotlin/JVM" 来处理;当它被构建为 iOS 框架时,通用的 Kotlin 代码会被当作 "Kotlin/Native" 来处理;当共享模块被构建为网页应用时,通用的 Kotlin 代码会被当作 "Kotlin/Wasm" 来处理。

一般来说,只要有可能,就要将你的实现写成通用代码,而不是在特定平台的源集中重复功能。

在 "composeApp/src/commonMain/kotlin" 目录下,打开 "App.kt" 文件。该文件包含 "App ()" 函数,这个函数实现了一个简约但完整的 Compose 多平台用户界面:

Kotlin 复制代码
@Composable
@Preview
fun App() {
    MaterialTheme {
        var showContent by remember { mutableStateOf(false) }
        Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
            Button(onClick = { showContent = !showContent }) {
                Text("Click me!")
            }
            AnimatedVisibility(showContent) {
                val greeting = remember { Greeting().greet() }
                Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
                    Image(painterResource(Res.drawable.compose_multiplatform), null)
                    Text("Compose: $greeting")
                }
            }
        }
    }
}

运行你的应用程序

你可以在安卓、iOS、桌面端以及网页端运行该应用程序。你无需按照特定顺序来运行这些应用,所以可以从你最熟悉的平台开始运行。

你无需使用 Gradle 构建任务。在多平台应用程序中,使用该任务会构建所有支持目标的调试版本和发布版本。依据在多平台向导中所选择的平台情况,这可能会花费一些时间。而使用运行配置则要快得多,在这种情况下,只会构建所选的目标平台版本。

在安卓平台上运行你的应用程序。

1:创建一个安卓虚拟设备。

2:在运行配置列表中,选择 "composeApp"。

选择你的安卓虚拟设备,然后点击 "运行":如果所选的安卓虚拟设备处于关机状态,Android Studio 将会启动它,并运行该应用程序

在 iOS 平台上运行你的应用程序

1:在单独的窗口中启动 Xcode 以完成初始设置。如果是首次启动 Xcode,你可能还需要接受其许可条款,并允许它执行一些必要的初始任务。

2:在 Android Studio 中,在运行配置列表里选择 "iosApp",然后点击 "运行"。默认情况下,该运行配置会启动 Xcode 中可用的模拟设备,并在该设备上运行应用程序。如果列表中没有可用的 iOS 配置,那就添加一个新的运行配置。

在新的 iOS 模拟设备上运行

如果你想在模拟设备上运行你的应用程序,可以添加一个新的运行配置。

1:在运行配置列表中,点击 "编辑配置"。

2:点击配置列表上方的 "+" 按钮,然后选择 "iOS Application"。

3:为你的配置命名。

4:选择 Xcode 项目文件。为此,导航至你的项目(例如,KotlinMultiplatformSandbox 项目),打开 "iosApp" 文件夹,然后选择 ".xcodeproj" 文件。

5:在 "执行目标" 列表中,选择一个模拟设备,然后点击 "确定"。

6:点击 "运行",以便在新的模拟设备上运行你的应用程序。
在真实的 iOS 设备上运行。

你可以在真实的 iOS 设备上运行你的多平台应用程序。在开始操作前,你需要设置与你的 "苹果 ID" 关联的Team ID。

设置你的 "Team ID"

要在你的项目中设置 "Team ID",你既可以使用 Android Studio 中的 KDoctor 工具,也可以在 Xcode 中选择你的团队。

对于 KDoctor:

1:在Android Studio中,在终端里运行以下命令:

bash 复制代码
kdoctor --team-ids

KDoctor 将会列出当前在你系统上配置好的所有Team ID,例如:

bash 复制代码
3ABC246XYZ (Max Sample)
ZABCW6SXYZ (SampleTech Inc.)

2:在Android Studio中,打开 "iosApp/Configuration/Config.xcconfig" 文件,并指定你的Team ID

或者,在 Xcode 中选择团队:

1:前往 Xcode 并选择 "Open a project or file."。

2:导航至你项目的 "iosApp/iosApp.xcworkspace" 文件。

3:在左侧菜单中,选择 "iosApp"。

4:导航至 "Signing & Capabilities." 选项。

5:在 "Team" 列表中,选择你的Team。

6:如果你尚未设置你的团队,可使用 "Team" 列表中的 "Add an Account" 选项,并按照 Xcode 中的指示操作。

确保 "包标识符" 是唯一的,并且 "签名证书" 已成功分配。

运行该应用程序

用数据线将你的 iPhone 连接起来。如果你已经在 Xcode 中注册过该设备,安卓工作室应该会在运行配置列表中显示它。运行相应的 iOS 应用程序配置。

如果你尚未在 Xcode 中注册你的 iPhone,按照苹果公司的建议操作。简而言之,你应该:

  1. 使用数据线连接你的 iPhone。
  2. 在你的 iPhone 上,在 "设置" 中的 "隐私与安全" 里启用开发者模式。
  3. 在 Xcode 中,进入顶部菜单并选择 "窗口"|"设备与模拟器"。
  4. 点击加号。选择你已连接的 iPhone 并点击 "添加"。
  5. 使用你的苹果 ID 登录,以便在该设备上启用开发功能。
  6. 按照屏幕上的提示完成配对流程。
  7. 一旦你已在 Xcode 中注册了你的 iPhone,就在安卓工作室中创建一个新的运行配置,并在 "执行目标" 列表中选择你的设备,然后运行相应的 iOS 应用程序配置。

在桌面上运行你的应用程序

你可以按以下步骤创建用于运行桌面应用程序的运行配置:

  1. 从主菜单中选择 "运行"|"编辑配置"。
  2. 点击 "+" 按钮,并从下拉列表中选择 "Gradle"。
  3. 在 "任务和参数" 字段中,粘贴以下这条命令然后点击确定:
bash 复制代码
composeApp:run

现在,你可以使用这个配置在其所属操作系统窗口中运行桌面应用程序:

运行你的网络应用程序

创建一个运行配置来运行网络应用程序:

  1. 从主菜单中选择 "运行"|"编辑配置"。
  2. 点击 "+" 按钮,并从下拉列表中选择 "Gradle"。
  3. 在 "任务和参数" 字段中,粘贴以下这条命令并点击确定:
bash 复制代码
wasmJsBrowserRun -t --quiet

现在,你可以使用这个配置来运行网络应用程序。

网络应用程序会在你的浏览器中自动打开。或者,当运行结束时,你也可以在浏览器中输入以下网址:

bash 复制代码
http://localhost:8080/

端口号可能会有所不同,因为 8080 端口可能不可用。你可以在 Gradle 构建控制台中找到实际的端口号。

相关推荐
传奇开心果编程9 分钟前
【声明式UI开发实用技术学与练】第8课 状态提升与下放
学习·flutter·react native·ui·swiftui·composer
传奇开心果编程15 小时前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程20 小时前
【现代声明式UI学与练】第4课 列表渲染与 key——如何高效渲染列表、key 的作用、列表重排时的状态保持
学习·flutter·react native·ui·swiftui·android jetpack
传奇开心果编程20 小时前
【Compose Multiplatform 跨端开发学与练】第5课 网络与数据层
android·网络·学习·ui·ios·kotlin·composer
传奇开心果编程1 天前
【SwiftUI提高练中学】第8课 网络层架构:拦截器、重试、缓存与离线优先
学习·macos·ui·ios·swiftui
传奇开心果编程2 天前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack
大圣编蚕2 天前
Rancher证书轮换过期导致不能访问UI问题处理
ui·rancher
可乐ea2 天前
Agent 评测换判据:用终态数据库状态判定任务是否完成
数据库·ui·oracle·mcp工具·agent评测·终态断言·智能体可靠性
传奇开心果编程2 天前
【Compose Multiplatform 跨端开发学与练】第3课 布局与组件
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程2 天前
【现代声明式UI学与练】第9课 性能优化——渲染优化、列表优化、内存优化、启动优化
学习·flutter·react native·ui·性能优化·swiftui·android jetpack