【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 多平台向导。

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 多平台用户界面:

@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中,在终端里运行以下命令:

kdoctor --team-ids

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

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. 在 “任务和参数” 字段中,粘贴以下这条命令然后点击确定:
composeApp:run

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

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

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

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

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

http://localhost:8080/

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/488507.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2:el-select中的@change事件如何传入自定义参数

在 Element UI 中,el-select 组件用于创建一个下拉选择框。当选项发生变化时,你可以使用 @change 事件来监听这个变化。默认传入的是选中项的值(如果是多选,则传入一个数组) 但是有些时候需要传入额外的自定义参数,可以通过如下方式实现 1、template中定义事件响应函数时…

鸿蒙元服务上架

鸿蒙元服务上架 一、将代码打包成 .app 文件1. 基本需求2. 生成密钥和证书请求文件3. 申请发布证书4. 申请发布Profile5. 配置签名信息6. 更新公钥指纹7. 打包项目成 .app 文件 二、发布元服务1. 进入应用信息页面2. 上传软件包3. 配置隐私协议4. 配置版本信息5. 提交审核&…

ubuntu检测是否已安装nvidia驱动以及产品类型

nvidia-sminvidia-smi 是 NVIDIA 提供的一个命令行工具,用于查看和管理 NVIDIA GPU 的状态。当你运行 nvidia-smi 命令时,它会显示当前系统中所有 NVIDIA GPU 的状态信息,包括 GPU 的使用率、温度、内存使用情况等。 有8个GPU nvcc -V查看c…

UnityShaderLab 实现程序化形状(一)

1.实现一个长宽可变的矩形: 代码: fixed4 frag (v2f i) : SV_Target{return saturate(length(saturate(abs(i.uv - 0.5)-0.13)))/0.03;} 2.实现一个半径可变的圆形: 代码: fixed4 frag (v2f i) : SV_Target{return (distance(a…

MySQL-DDL之数据表操作

文章目录 一. 表的创建1. 表的创建2. 栗子 二. 查看表1. 查看数据库中的所有表2. 查看表结构 三. 删除表1. 删除表 四. 修改表结构1. 添加字段2. 修改字段① 修改字段名字② 修改字段类型 3. 删除字段4. 修改表名 数据定义语言:简称DDL(Data Definition Language) 一…

大语言模型(LLM)与智能机器人的应用分析

系列文章目录 前言 近年来,大型语言模型(LLM)的集成彻底改变了机器人领域,使机器人能够以人类熟练程度进行交流、理解和推理。本文探讨了 LLM 对机器人的多方面影响,并针对在不同领域利用这些模型的关键挑战和机遇进行了研究。通过将 LLM 应用程序分类并分析核心机器人元素…

【pyspark学习从入门到精通23】机器学习库_6

目录 分割连续变量 标准化连续变量 分类 分割连续变量 我们经常处理高度非线性的连续特征,而且只用一个系数很难拟合到我们的模型中。 在这种情况下,可能很难只通过一个系数来解释这样一个特征与目标之间的关系。有时,将值划分到离散的桶中…

Maven 安装配置(详细教程)

文章目录 一、Maven 简介二、下载 Maven三、配置 Maven3.1 配置环境变量3.2 Maven 配置3.3 IDEA 配置 四、结语 一、Maven 简介 Maven 是一个基于项目对象模型(POM)的项目管理和自动化构建工具。它主要服务于 Java 平台,但也支持其他编程语言…

使用C#通过ColorMatrix对象为图像重新着色

此示例产生了一些令人印象深刻的结果,但实际上非常简单。 它使用其他几个示例演示的 ImageAttribute 技术来快速操作图像的颜色。 下面的AdjustColor方法启动图像着色的过程。 // Adjust the images colors. private Image AdjustColor(Image image) {// Make the …

Flink 核心知识总结:窗口操作、TopN 案例及架构体系详解

目录 一、FlinkSQL 的窗口操作 (一)窗口类型概述 (二)不同时间语义下窗口实践 EventTime(事件时间) ProcessTime(处理时间) 二、窗口 TopN 案例解析 三、Flink架构体系 &…

如何部署FastAPI

环境: Win10 FastAPI 问题描述: 如何部署FastAPI 解决方案: FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,使用 Python 3.6 及更高版本。它的设计目的是提供简单且易于使用…

day10性能测试(2)——Jmeter安装环境+线程组+Jmeter参数化

【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、LoadRunner vs Jmeter 1.1 LoadRunner 1.2 Jmeter 1.3 对比小结 2、Jmeter 环境安装 2.1 安装jdk 2.2 安装Jmeter 2.3 小结 3、Jmeter 文件目录结构 4、Jmeter默认配置修改 5、Jmeter元件、组…

Android显示系统(08)- OpenGL ES - 图片拉伸

Android显示系统(02)- OpenGL ES - 概述 Android显示系统(03)- OpenGL ES - GLSurfaceView的使用 Android显示系统(04)- OpenGL ES - Shader绘制三角形 Android显示系统(05)- OpenGL…

【工业机器视觉】基于深度学习的水表盘读数识别(4-训练与预测)

【工业机器视觉】基于深度学习的仪表盘识读(读数识别)(3)-CSDN博客 训练与预测 Ultralytics YOLO指的是由Ultralytics公司开发的一系列基于YOLO(You Only Look Once)架构的目标检测算法。YOLO是一种实时目标检测系统,它…

C语言——上下弹跳的小球

//上下弹跳的小球 #include<stdio.h> #include<stdlib.h> #include<windows.h> int main() {int i,j;int x5;int y10;int height20;int velocity1; //记录速度的变量while(1) {xxvelocity;system("cls"); //清屏函数for(i0;i<x;i) {printf…

河工oj第七周补题题解2024

A.GO LecturesⅠ—— Victory GO LecturesⅠ—— Victory - 问题 - 软件学院OJ 代码 统计 #include<bits/stdc.h> using namespace std;double b, w;int main() {for(int i 1; i < 19; i ) {for(int j 1; j < 19; j ) {char ch; cin >> ch;if(ch B) b …

如何利用DBeaver配置连接MongoDB和人大金仓数据库

最近根据国产化要求&#xff0c;需要使用国产数据库&#xff0c;但习惯使用DBeaver连接各种成熟的商业或开源数据库。因此&#xff0c;就想着如何继续基于该工具&#xff0c;连接MongoDB和人大金仓数据库&#xff0c;查了半天很多地方说法不统一&#xff0c;所以自己就简单整理…

esp32 OTA学习笔记

csv分区表中ota-0和ota-1存放程序 不超过1600kb的程序可以ota&#xff08;可手动划分&#xff09; 分区表中有 ota0和ota1两个数据分区。 ota是指先下载固件到ota1然后下次从ota1启动&#xff0c;回滚就是回到ota0 启动。 关于固件&#xff1a; bin文件可以用arduino生成也可以…

获得日志记录之外的新视角:应用程序性能监控简介(APM)

作者&#xff1a;来自 Elastic David Hope 日志记录领域即将发生改变。在这篇文章中&#xff0c;我们将概述从单纯的日志记录到包含日志、跟踪和 APM 的完全集成解决方案的推荐流程。 通过 APM 和跟踪优先考虑客户体验 企业软件开发和运营已成为一个有趣的领域。我们拥有一些非…

【Python网络爬虫 常见问题汇总】

目录 1. 爬取图片出现403解决办法&#xff1a;设置请求头中的Referer字段 2.关于干坏事的问题后续不定期更新 欢迎共同探讨学习进步 1. 爬取图片出现403 问题出自案例9&#xff0c;已解决。 【Python网络爬虫笔记】9- 抓取优美图库高清壁纸 当在爬取图库图片时遇到 403 错误…