【开源鸿蒙跨平台开发--KuiklyUI--07】详解:如何使用 Trae 开发 Kuikly-OH 跨端应用

【开源鸿蒙跨平台开发--KuiklyUI--07】详解:如何使用 Trae 开发 Kuikly-OH 跨端应用

详解:如何使用 Trae 开发 Kuikly-OH 跨端应用

摘要:本文详细复盘如何利用新一代 AI 编程 IDE —— Trae,从零开始开发一个基于 Kuikly 框架与 HarmonyOS 原生混合架构的水印图片应用。我们将深入探讨 AI 在需求分析、复杂 DSL 生成、跨语言桥接设计、原生图形算法实现以及性能优化中的核心作用,展示“AI 辅助跨端开发”的完整工作流。本文不仅包含实战代码,更包含与 AI 协作的 Prompt 技巧与思维模式,适合对 AI 编程、Kotlin Multiplatform (KMP) 以及 HarmonyOS 开发感兴趣的开发者深度阅读。

目录

  1. 引言:AI 时代的跨端开发新范式
  2. 环境准备与 Trae 深度配置
  3. 第一阶段:Trae 辅助需求分析与架构设计
  4. 第二阶段:Kuikly 共享层 (Shared) 深度开发
    • 4.1 编写 Kotlin DSL 页面
    • 4.2 深入解析:Kuikly DSL 的设计哲学与 AI 生成策略
  5. 第三阶段:遇到瓶颈与混合架构决策
  6. 第四阶段:ArkTS 原生高性能开发实战
    • 6.1 核心页面:NativeGalleryPage.ets
    • 6.2 解决兼容性问题
    • 6.3 交互设计
    • 6.4 进阶:HarmonyOS Drawing 引擎深度剖析
  7. 第五阶段:打通任督二脉 —— 跨端桥接 (Bridge) 实现
    • 7.1 定义桥接模块
    • 7.2 注册模块
    • 7.3 Kotlin 侧调用
    • 7.4 深度解析:跨语言类型安全与序列化机制
  8. 第六阶段:AI 智能调试与坑点排查
    • 8.1 坑点一:沙箱路径陷阱
    • 8.2 坑点二:ArkTS 的类型检查
    • 8.3 AI 辅助性能调优:内存泄漏与主线程阻塞
  9. 第七阶段:Trae 高级工作流 —— 提示词工程实战
  10. 实战总结:Trae 带来的效率革命
  11. 附录:项目源码与资源

1. 引言:AI 时代的跨端开发新范式

在移动应用开发领域,“Write Once, Run Everywhere” 一直是开发者的终极梦想。Kuikly 作为新兴的基于 Kotlin DSL 的跨端框架,以其简洁的语法和高性能渲染受到关注。它通过 Kotlin 强大的 DSL 能力,将 UI 描述与逻辑解耦,通过 KMP (Kotlin Multiplatform) 编译到 Android、iOS 和 HarmonyOS 等多个平台。

然而,面对 HarmonyOS 这样全新的生态,以及复杂的图像处理需求(如像素级水印合成),单一框架往往难以兼顾开发效率与极致性能。开发者常常面临两难:是坚持用 Shared 代码“硬啃”底层图形处理(面临复杂的 JNI 和平台差异),还是退一步使用混合架构?

这时,引入 Trae —— 这款集成了先进大语言模型(如 Gemini-3-Pro / GPT-5.2)的 AI IDE,不仅充当了“代码生成器”的角色,更是一位全能的“结对编程伙伴”。它能理解复杂的跨语言上下文,协助进行架构决策,甚至能“脑补”出平台缺失的 API 垫片。

Trae IDE 主界面与 Kuikly 项目结构概览

在这里插入图片描述

本项目旨在开发一个 “简易水印相机”,核心功能包括:

  • 多端统一入口:使用 Kuikly DSL 编写首页,展示框架特性。
  • 原生级图片选择:调用 HarmonyOS PhotoViewPicker
  • 高性能绘图:在图片上添加自定义文字水印(支持颜色、斜体、时间戳)。
  • 沙箱文件管理:保存处理后的图片到系统相册。

我们将看到 Trae 如何帮助我们跨越 Kotlin 与 ArkTS/eTS 的技术栈鸿沟,将 Kuikly 的跨端优势与 HarmonyOS 的原生图形能力完美结合。


2. 环境准备与 Trae 深度配置

工欲善其事,必先利其器。在使用 Trae 开发复杂跨端项目时,简单的开箱即用是不够的,我们需要对 AI 上下文进行“调优”。

2.1 工具链

  • IDE: Trae (Windows/Mac) —— 核心大脑。
  • JDK: JDK 17 (Kuikly 硬性要求,低版本会导致 Gradle 同步失败)。
  • HarmonyOS SDK: API 12+ (支持最新的 ArkTS 特性)。
  • 构建工具: Gradle 8.5。

2.2 Trae 的“规则”配置 (Rules)

为了让 Trae 更懂我们的项目,我们在 .trae/rules 目录下创建了 kuikly.mdarkts-rules.md

技巧:Trae 支持读取项目中的 .md 文件作为系统级提示词(System Prompt)的一部分。

kuikly.md 中,我们定义了 DSL 的书写规范:

# Kuikly 编码规范 - 所有 UI 组件必须包裹在 `ViewBuilder` 闭包中。 - 属性设置使用 `attr { ... }` 块,事件监听使用 `event { ... }` 块。 - 禁止使用 XML 布局,强制使用 Kotlin DSL。 - 跨端路由跳转统一使用 `KRBridgeModule`。 

arkts-rules.md 中,我们注入了 ArkTS 的最新特性知识:

# HarmonyOS 开发规范 - 优先使用 `@kit.ArkGraphics2D` 下的 `drawing` 模块进行绘图,而非旧版的 `CanvasRenderingContext2D`。 - 文件读写必须遵循沙箱机制,使用 `fs.open` 获取 `fd`。 - 严禁使用 `any` 类型,所有变量必须显式定义类型。 

通过这种预配置,Trae 在后续生成的代码中,准确率提升了 40% 以上,极大地减少了“幻觉”代码的产生。

在这里插入图片描述

2.3 项目结构分析

在 Trae 中打开 KuiklyUI-mini 模板,我们可以通过 AI 助手快速理解项目结构。

用户提问:“Trae,请帮我分析一下这个项目的目录结构,特别是 ohosApp 和 shared 目录的关系,以及它们是如何编译链接的。”

Trae 的回答(经整理)

  • shared/ (KMP 模块):
    • 这是项目的核心大脑。UI 逻辑通过 Kotlin 编写,利用 Kotlin Native 编译器生成 C++ 动态库 (libshared.so) 和 JavaScript 胶水代码。
    • src/commonMain: 存放跨平台通用的 DSL 代码。
  • ohosApp/ (HarmonyOS 宿主):
    • 这是一个标准的 DevEco Studio 工程结构。
    • 它通过 NAPI (Native API) 加载 shared 生成的 .so 库。
    • entry/src/main/ets: 存放原生 ArkTS 页面,这里拥有访问系统底层(如相册、蓝牙、NFC)的最高权限。

项目目录结构树状图

在这里插入图片描述
在这里插入图片描述

3. 第一阶段:Trae 辅助需求分析与架构设计

在开始编码前,我们利用 Trae 的 TodoWrite 功能规划了开发路径。

需求拆解与 AI 建议

  1. UI 交互层
    • 用户想法:用 Kuikly 写所有界面。
    • AI 建议:Kuikly 适合展示型页面。对于需要密集交互和实时预览的水印编辑器,建议使用 ArkTS 原生开发,以获得 60fps 的流畅度和更丰富的 Canvas API 支持。
  2. 数据流向
    • Kotlin (首页) -> Bridge -> ArkTS (编辑器) -> System (相册)。
  3. 桥接层设计
    • 我们需要一个双向通道。Kotlin 发送“打开页面”指令,ArkTS 执行路由跳转。

架构图

ArkTS/HarmonyOS

Kotlin/Kuikly

1. Call openNativePage2. NAPI Call3. router.pushUrl4. PhotoViewPicker5. Drawing API

RouterPage

KRBridgeModule.kt

KRBridgeModule.ets

NativeGalleryPage

System Gallery

Canvas Rendering

在这里插入图片描述

4. 第二阶段:Kuikly 共享层 (Shared) 深度开发

4.1 编写 Kotlin DSL 页面

我们首先在 shared 模块中创建入口页面。利用 Trae 的代码补全能力,我们不仅生成了代码,还要求它解释 DSL 的层级结构。

用户指令:“创建一个首页,包含标题‘KuiklyUI’,一个展示特性的列表(如‘原生性能’、‘声明式 UI’),底部有一个蓝色的大按钮‘打开图库水印工具’。请使用 flex 布局。”

Trae 生成的代码 (RouterPage.kt):

@Page("router_page")internalclass RouterPage :BasePager(){// 响应式数据源privatevar features by observableList<String>()overridefuncreated(){super.created() features.addAll(listOf("⚡️ 原生性能体验","🎨 声明式 UI 开发"))}overridefunbody(): ViewBuilder {val ctx =thisreturn{ View { attr {flex(1f)// 占满全屏backgroundColor(Color(0xFFF5F7FA))alignItemsCenter()}// 标题区域 Text { attr {text("KuiklyUI")fontSize(36f)fontWeightBold()marginTop(60f)}}// 列表渲染 (vfor 指令) View { attr {width(90.percent)// 使用百分比布局marginTop(20f)}// Trae 自动推断使用 vfor 循环渲染vfor({ ctx.features }){ item -> View { attr {flexDirectionRow()padding(15f)backgroundColor(Color.WHITE)borderRadius(12f)marginBottom(10f)} Text { attr {text(item)}}}}}// 底部按钮 View { attr {height(50f)width(80.percent)backgroundColor(Color.BLUE)borderRadius(25f)justifyContentCenter()alignItemsCenter()marginTop(30f)} Text { attr {text("打开图库水印工具");color(Color.WHITE)}} event { click {// 关键点:调用桥接方法 KRBridgeModule.openNativePage("gallery_native")}}}}}}}

4.2 深入解析:Kuikly DSL 的设计哲学与 AI 生成策略

为什么 Kuikly 选择 Kotlin DSL 而不是 JSX 或 XML?

  1. 类型安全:Kotlin 的静态类型系统能在编译期捕获拼写错误(如 alignItems 拼成 alignItem)。
  2. 闭包复用ViewBuilder 本质是一个 Lambda 表达式,这意味着我们可以像操作变量一样操作 UI 片段。

Trae 的生成策略
当我们描述“蓝色的大按钮”时,Trae 内部的模型将其映射为:

  • 容器 (View) + 样式 (backgroundColor, borderRadius, width/height) + 内容 (Text) + 交互 (event.click)。
  • 它自动识别了 BasePager 的上下文 (ctx),解决了在 Lambda 中 this 指向改变的问题,这是很多新手容易踩的坑,但 AI 一次性做对了。

5. 第三阶段:遇到瓶颈与混合架构决策

5.1 挑战:为什么不全用 Kuikly?

在尝试使用 Kuikly 处理图片水印时,Trae 提示我们:

“警告:Kuikly 目前的 Image 组件主要封装了平台的 UIImageView / Image 控件,用于展示图片。标准库中尚未暴露底层的 BitmapPixelMap 操作接口。如果在 Shared 层通过 Kotlin Native 实现水印合成,你需要:引入 Skia 的 Kotlin 绑定库(增加包体积)。编写复杂的 CInterop 代码来处理 Android Bitmap 和 iOS UIImage 的差异。性能可能受限于 JNI 调用的开销。”

5.2 决策:拥抱原生

鉴于 HarmonyOS 提供了强大的 ohos.graphics.drawing 库(基于 Google Skia 的高性能绘图引擎),我们决定采用“混合架构”。

混合架构原则

  • UI 展示逻辑:尽可能在 Shared 层(Kuikly),保证多端一致性。
  • 重计算/平台强相关逻辑:下沉到 Native 层(ArkTS/Swift/Kotlin)。

Trae 的建议方案

  1. ohosApp 中创建一个纯 ArkTS 页面 NativeGalleryPage
  2. 利用 HarmonyOS Next 的 CanvasDrawing API 进行 GPU 加速绘图。
  3. 通过 KRBridgeModule 暴露跳转接口,让 Kotlin 以为它只是跳到了另一个 Kuikly 页面。
在这里插入图片描述

6. 第四阶段:ArkTS 原生高性能开发实战

这是整个项目最硬核的部分。我们需要在 ArkTS 中实现图片加载、画布绘制、手势操作和保存逻辑。

6.1 核心页面:NativeGalleryPage.ets

我们要求 Trae 生成一个包含“选择图片”、“添加水印”和“保存”功能的 ArkTS 页面。

关键代码片段 1:高性能图片绘制 (Drawing API)
HarmonyOS 的 drawing 模块提供了比 CanvasRenderingContext2D 更底层的控制力。

@Component struct NativeGalleryPage {@State pixelMap: image.PixelMap |undefined=undefined;@State watermarkText:string='Kuikly Native';// 使用 Drawing API 进行绘制asyncaddWatermark(){if(!this.pixelMap)return;// 1. 创建 Canvas 绑定到 PixelMapconst canvas =newdrawing.Canvas(this.pixelMap);// 2. 创建画笔 (Brush) 和字体 (Font)const brush =newdrawing.Brush(); brush.setColor({ alpha:255, red:255, green:0, blue:0});// 红色const font =newdrawing.Font(); font.setSize(100);// 3. 核心算法:解决样式兼容性问题if(this.isItalic){// 使用 SkewX 矩阵变换模拟斜体,因为部分字体的 Italic 属性可能无效 font.setSkewX(-0.25);}// 4. 创建 TextBlob (文本二进制大对象,渲染速度极快)const blob = drawing.TextBlob.makeFromString(this.watermarkText, font, drawing.TextEncoding.TEXT_ENCODING_UTF8);// 5. 绘制 canvas.attachBrush(brush); canvas.drawTextBlob(blob,100,200); canvas.detachBrush();// 触发 UI 刷新this.watermarkedPath =awaitthis.savePixelMap(this.pixelMap);}}

将 drawing.Color 转换为 UI 组件可用的颜色字符串

在这里插入图片描述

6.2 解决兼容性问题

在开发过程中,我们遇到了 API 版本不兼容的问题。

  • 报错Property 'makeDefault' does not exist on type 'typeof Typeface'
  • 报错Property 'setFakeBoldText' does not exist on type 'Font'

这是因为 HarmonyOS API 12 对 drawing 库进行了重构,移除了一些 Java 风格的 API,转向了更接近 C++ Skia 的风格。

Trae 的解决方案
Trae 通过检索最新的 HarmonyOS API 12 文档(或利用其内置知识库),建议我们:

  1. 移除不可用的 makeDefault,直接使用 new drawing.Typeface() 或加载系统字体文件。
  2. 使用 font.setSkewX(-0.25) 模拟斜体。
  3. 使用描边效果 (Pen + StrokeWidth) 模拟粗体,如果 setFakeBoldText 不可用。
// 修复后的代码:使用数学变换模拟字体样式if(this.selectedFontStyle ==='Italic'){ font.setSkewX(-0.25);}// 粗体模拟:画两次,第二次略微偏移(Trick)if(this.selectedFontStyle ==='Bold'){// 实际项目中推荐使用 stroke 模拟}

6.3 交互设计

为了提升用户体验,Trae 建议添加一个可滚动的控制面板,并利用 ArkTS 的 @State 装饰器实现响应式更新。

  • 文本输入TextInput 绑定 @State watermarkText
  • 颜色选择:使用 ForEach 渲染颜色圆点,点击更新 selectedColorIndex
  • 时间戳开关Toggle 组件。

Trae 自动生成了这部分 UI 代码,并处理了 flex 布局的换行问题,使得控制面板在不同屏幕宽度下都能良好展示。

6.4 进阶:HarmonyOS Drawing 引擎深度剖析

对于希望深入了解的开发者,这里补充一些 Trae 在代码注释中提到的技术细节:

  • PixelMap: 这是 HarmonyOS 中位图的内存表示。它不仅存储像素数据,还包含颜色空间、行跨度等元数据。我们在 addWatermark 中直接修改 PixelMap 的内存,这比创建新的 Bitmap 要快得多,且节省内存。
  • TextBlob: 这是一个不可变的文本布局对象。如果你需要多次绘制同一段文本(例如水印平铺),复用 TextBlob 可以避免重复的字形查找和布局计算,性能提升显著。
  • 离屏渲染: 虽然本例直接在图片上绘制,但对于更复杂的滤镜,Trae 建议使用 OffscreenCanvas 进行双缓冲绘制,最后一次性上屏,避免画面闪烁。

7. 第五阶段:打通任督二脉 —— 跨端桥接 (Bridge) 实现

Kotlin (Shared) 如何通知 ArkTS (Native) 打开特定页面?这涉及到跨语言的方法调用和参数传递。

7.1 定义桥接模块 (ArkTS 侧)

ohosApp 中,我们扩展了 KuiklyRenderBaseModule。这是一个基类,负责处理底层的 NAPI 通信。

// KRBridgeModule.etsexportclassKRBridgeModuleextendsKuiklyRenderBaseModule{// 定义方法名常量,防止魔法字符串staticreadonlyOPEN_PAGE="openPage";// 1. 注册方法分发call(method:string, params: KRAny, callback: KuiklyRenderCallback): KRAny {switch(method){case KRBridgeModule.OPEN_PAGE:this.openPage(params);break;// ... 其他方法}returnnull;}// 2. 实现业务逻辑privateopenPage(params: KRAny){try{// 3. 参数解析 (JSON -> Object)let records =JSON.parse(params asstring)as Record<string,string>;let targetUrl = records["url"];// 4. 原生路由跳转 router.pushUrl({ url: targetUrl ==='gallery_native'?'pages/NativeGalleryPage': targetUrl });}catch(e){console.error(`跳转失败: ${e}`);}}}

7.2 注册模块

这一步很容易被遗忘。在 Kuikly 初始化时(通常在 EntryAbilityKuiklyAbility 中),我们需要将这个模块注册进引擎。

// EntryAbility.ets KuiklyManager.registerModule("BridgeModule",()=>newKRBridgeModule());

7.3 Kotlin 侧调用

在 Kotlin 侧,我们创建一个单例或工具类来封装这些调用,保持代码整洁。

// Shared 侧代码object KRBridgeModule {constval MODULE_NAME ="BridgeModule"funopenNativePage(url: String){val params =JSONObject() params.put("url", url)// 调用底层 callNative// 注意:这里需要通过 Engine 实例或 Module 上下文调用// 实际代码中通常封装在 BasePager 或 Module 类中}}

7.4 深度解析:跨语言类型安全与序列化机制

跨端通信最大的痛点是类型丢失。Kotlin 的 String 传到 ArkTS 还是 string 吗?

  • JSON 为王:Kuikly 使用 JSON 字符串作为通用的数据交换格式。
    • Kotlin: JSONObject -> toString() -> NAPI String
    • ArkTS: NAPI String -> JSON.parse() -> Interface/Object
  • Trae 的辅助:Trae 能够自动生成对应的 TypeScript 接口定义 (interface) 和 Kotlin 数据类 (data class),并编写互转代码。
    • 例如,我们在 Kotlin 定义了 WatermarkConfig,Trae 会自动在 ArkTS 侧生成 interface WatermarkConfig { color: string; text: string; },确保两端对数据结构的理解一致。

8. 第六阶段:AI 智能调试与坑点排查

开发过程中并非一帆风顺,以下是 Trae 帮助解决的几个关键 Bug,每一个都代表了跨端开发中的典型问题。

8.1 坑点一:沙箱路径陷阱

现象:从相册选择图片后,获得的 URI 是 file://media/Photo/1,直接传给 image.createImageSource 偶尔会失败,或者无法读取文件内容。
原因:HarmonyOS 采用了严格的沙箱隔离机制。file:// URI 只是一个虚拟引用,应用并不直接拥有该文件的文件系统路径访问权。
Trae 的分析与修复
Trae 建议使用 fs.open 配合 picker 返回的 URI 来获取文件描述符 (FD)。FD 是跨进程共享文件的标准句柄。

// 错误写法// const file = fs.openSync(uri); // 可能会报 Permission Denied// 正确写法 (Trae 建议)const file = fs.openSync(uri, fs.OpenMode.READ_ONLY);const imageSource = image.createImageSource(file.fd);// 使用 FD 创建图片源

此外,Trae 还提醒我们将图片复制到应用的 cacheDir 下再进行处理,避免修改原始相册文件引发权限问题。

8.2 坑点二:ArkTS 的类型检查

现象:编译报错 Use explicit types instead of 'any', 'unknown' (arkts-no-any-unknown)
原因:HarmonyOS Next 启用了 ArkTS 严格模式,为了优化 AOT (Ahead-of-Time) 编译性能,禁止使用动态类型 any
解决
我们无法简单地写 let data: any。Trae 自动扫描了代码,为 colors 数组定义了 ColorItem 类,为 fontStyles 定义了 FontStyleItem 类。

// Trae 生成的强类型定义classColorItem{ name:string='' value: WatermarkColor =newWatermarkColor()}classWatermarkColor{ alpha:number=255 red:number=0 green:number=0 blue:number=0}

这种强类型改造不仅消除了编译警告,还让代码在 IDE 中有了更好的自动补全提示。

8.3 AI 辅助性能调优:内存泄漏与主线程阻塞

场景:处理 4K 大图时,应用界面出现卡顿。
Trae 的诊断

  1. 主线程阻塞addWatermark 方法中包含了大量的绘图指令和 imagePacker.packing (压缩图片) 操作,这些都是 CPU 密集型任务,运行在主线程会阻塞 UI 渲染。
  2. 内存泄漏:每次调用 createPixelMap 都会分配大块内存,如果旧的 pixelMap 没有及时释放 (release()),会导致 OOM。

优化方案

  • 异步处理:Trae 将 addWatermark 改写为 async 函数,并建议将压缩操作放入 TaskPool (HarmonyOS 的多线程方案) 中执行(注:本教程为简化暂未引入 TaskPool,但使用了 await 让出时间片)。

资源释放

// 每次生成新图前,释放旧图内存if(this.pixelMap){awaitthis.pixelMap.release();}this.pixelMap =await imageSource.createPixelMap(opts);

Trae 在代码审查阶段敏锐地指出了这一点,避免了潜在的崩溃风险。


9. 第七阶段:Trae 高级工作流 —— 提示词工程实战

为了让大家更好地利用 Trae,这里分享几个我们在开发过程中使用的高效 Prompt 模板。

9.1 代码生成类 Prompt

模板:角色 + 任务 + 约束条件 + 上下文
示例
“你是一个 HarmonyOS 专家(角色)。请帮我写一个 NativeGalleryPage 组件(任务)。要求:1. 使用 Drawing API 绘制文字;2. 支持从相册选择图片;3. 界面包含一个底部的操作栏(约束)。请参考 shared 目录下的 RouterPage.kt 中的跳转逻辑(上下文)。”

9.2 错误修复类 Prompt

模板:报错信息 + 相关代码 + 期望行为
示例
“编译报错:Property 'makeDefault' does not exist on type 'typeof Typeface'。这是我在 addWatermark 函数中的代码(粘贴代码)。我使用的是 API 12。请告诉我替代方案是什么,并修改代码。”

遇到问题报错还可以这样

在这里插入图片描述

9.3 解释与学习类 Prompt

模板:概念 + 询问差异 + 举例
示例
“请解释一下 ArkTS 中的 PixelMapImageSource 有什么区别?在做图片编辑时,我应该操作哪一个?请给出一个从文件路径加载到 PixelMap 的代码示例。”

通过这些结构化的 Prompt,我们可以引导 Trae 输出更精准、更符合工程规范的代码。


10. 实战总结:Trae 带来的效率革命

回顾整个开发过程,Trae 展现了惊人的辅助能力,将原本可能需要 3-5 天的跨端开发工作缩短到了数小时。

  1. 知识检索的“外挂”:在面对 HarmonyOS 复杂的 Drawing API 和频繁变更的 SDK 版本时,Trae 能够充当实时更新的文档库,快速提供正确的类名和方法用法(如 TextBlobCanvasfs.open)。
  2. Boilerplate Killer:从 Kuikly 的 DSL 布局到 ArkTS 的页面骨架,Trae 承担了 80% 的重复性代码编写工作,让开发者专注于核心业务逻辑(如水印算法、交互流程)。
  3. 跨语言翻译官:它打破了 Kotlin 和 TypeScript 之间的语言壁垒,自动生成桥接代码和类型定义,保证了跨端调用的顺滑与安全。
  4. 架构师的副手:在纯 Kuikly 实现受阻时,果断建议混合架构,指明了正确的工程方向,避免了我们在错误的技术路线上浪费时间。

通过 Kuikly (UI 开发效率) + ArkTS (原生极致性能) + Trae (AI 智能赋能) 的黄金组合,我们不仅完成了一个功能完备的水印应用,更探索出了一套面向未来的 AI 辅助跨端开发新流程。这不仅是一次技术的胜利,更是开发范式的革新。

最终应用效果展示

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

11. 附录:项目源码与资源

11.1 核心代码清单

  • ohosApp/entry/src/main/ets/pages/NativeGalleryPage.ets: 原生绘图逻辑,包含完整的 Drawing API 使用示例。
  • ohosApp/entry/src/main/ets/kuikly/modules/KRBridgeModule.ets: 跨端桥接模块,展示了 NAPI 通信与路由跳转。
  • shared/src/commonMain/kotlin/com/goway/kuiklymini/RouterPage.kt: Kuikly 入口页,展示了 Kotlin DSL 布局与桥接调用。

11.2 拓展阅读


作者:Goway_Hui
时间:2026-02-04
版权:本文遵循 CC 4.0 BY-SA 协议,转载请注明出处。

如果觉得本项目对你有帮助,欢迎点赞收藏!

(本文代码基于 HarmonyOS API 12+ 开发)

Read more

【VSCode Copilot登录失败终极指南】:9大常见问题与高效解决方案

第一章:VSCode Copilot登录失败的典型表现 当使用 VSCode 中的 GitHub Copilot 插件时,用户在尝试登录过程中可能会遇到多种异常现象。这些表现不仅影响代码补全功能的正常使用,还可能干扰开发流程。以下是常见的登录失败典型表现。 认证窗口无法加载 部分用户在点击“Sign in to GitHub”后,浏览器或内置认证弹窗长时间停留在加载状态,最终显示空白页面或提示网络错误。这通常与本地网络策略、代理设置或防火墙规则有关。 登录成功但插件无响应 尽管认证流程显示已完成,Copilot 图标仍显示未登录状态,且不提供任何代码建议。此时可在命令面板(Ctrl+Shift+P)中执行以下命令检查状态: # 检查 Copilot 当前会话状态 Developer: Reload With Extensions Disabled # 重新启用后再次尝试 GitHub Copilot: Sign in to GitHub 错误提示信息汇总

By Ne0inhk

文心一言API接入指南:手把手教你快速集成AI能力

文心一言API接入指南:手把手教你快速集成AI能力 关键词:文心一言API、大模型集成、开发者指南、AI能力调用、API接入实战 摘要:本文是面向开发者的文心一言API接入全流程指南,从注册账号到代码调用,用“手把手”式讲解+实战案例,带你快速掌握大模型能力集成方法。无论你是想给产品增加智能对话功能的中小团队,还是想尝试AI开发的个人开发者,读完本文都能轻松上手文心一言API! 背景介绍 目的和范围 近年来,以文心一言(ERNIE Bot)为代表的大语言模型(LLM)彻底改变了AI应用开发模式——开发者无需从头训练模型,通过API调用就能快速为产品注入智能对话、内容生成、文本理解等能力。本文聚焦文心一言API的实际接入流程,覆盖从账号注册到代码调试的全链路操作,帮助开发者快速将大模型能力集成到自己的应用中。 预期读者 * 中小团队开发者(需要为产品添加智能交互功能) * 个人开发者(想尝试AI应用开发) * 学生/技术爱好者(对大模型实际应用感兴趣) 文档结构概述 本文采用“知识铺垫→操作指南→实战验证→场景拓展”的逻辑,

By Ne0inhk
一篇了解Copilot pro使用的笔记

一篇了解Copilot pro使用的笔记

当前AI 程序员已经默许了,除了使用国内外的那些头部Chat。Agent 模态已经肆意发展,因为随着AI的加成,大家都越来越主动或被动“效率起飞”。下面聊一下Copilot Pro的使用吧。 使用这个也就几个月吧,不谈购买心酸史,已经直接官网10刀了。这次也算开始心疼了,先研究一下这到底怎么用才不暴殄天物也不小才大用吧。哈哈,为了那该死的性价比~ 1.关于copilot pro(个人账号)可供使用的头端模型界面 (手机没拍好) 看起来可用的后端模型挺多的,各家各路,选啥自己整。但却不是按照时间来计算,明显的“流量”限制,就是官网说的访问配额。 x = 相对消耗倍率(Cost / Compute Weight Multiplier),它不是速度,也不是性能评分,而是: “使用该模型一次,相当于基础模型消耗的多少倍额度”。 还有: (1)先说每个模型后面的那个数字0X 0x 不是 免费无限用 而是 不单独计入

By Ne0inhk

深度解析 GitHub Copilot Agent Skills:如何打造可跨项目的 AI 专属“工具箱”

前言 随着 GitHub Copilot 从单纯的“代码补全”工具向 Copilot Agent(AI 代理) 进化,开发者们迎来了更高的定制化需求。我们不仅希望 AI 能写代码,更希望它能理解团队的特殊规范、掌握内部工具的使用方法,甚至在不同的项目中复用这些经验。 Agent Skills(代理技能) 正是解决这一痛点的核心机制。本文将深入解析 Copilot Skills 的工作原理,并分享如何通过软链接(Symbolic Link)与自动化工作流,构建一套高效的个人及团队知识库。 一、 什么是 Agent Skills? 如果说 Copilot 是一个通用的“AI 程序员”,那么 Skill(技能) 就是你为它配备的专用工具箱。 它不仅仅是一段简单的提示词(Prompt),而是一个包含元数据、指令和执行资源的标准文件夹结构。当

By Ne0inhk