HarmonyOS鸿蒙Next中将已有的Arkts项目转为Cangjie混合开发工程
HarmonyOS鸿蒙Next中将已有的Arkts项目转为Cangjie混合开发工程 本来没想写这一篇博客的,但我这天突然心血来潮,跟着华子的文档走了一遍,发现根本跑不通,于是决定写一篇博客记录一下我的经历,让大家少走点弯路。在本文中,我将详细介绍如何将已有的Arkts项目转为Cangjie混合开发工程,包括准备工作、配置步骤和常见问题解决方法。
获取鸿蒙Cangjie开发插件
撰写本文时,HarmonyOS NEXT仓颉语言开发者预览版Beta招募仍在进行中,其报名周期为:2024年6月21日-2025年3月30日,后续报名开放情况需关注华为官方消息。你可以点击这里查看当前是否在招募中,如果正在招募,点击“立即报名”即可开始报名。
在报名成功,并获取到预览版资格后,即可前往下载中心下载DevEco Studio-Cangjie Plugin
。对于macOS用户,如果你的浏览器在你下载完后直接自动给你解压了这个压缩包,你可能需要手动把它给压缩回去,否则DevEco Studio无法识别此插件,进而无法安装。压缩好后打开DevEco Studio,在插件页面点击从磁盘安装插件,并选择你的插件压缩包,即可安装成功。
添加仓颉混合库
在DevEco Studio中,右击你的项目根文件夹,选择新建-模块,再选择[Cangjie]Hybrid Static Library
注意,我们的目标是混合开发,必须选择Hybrid,否则无法成功引用此库
编写Cangjie侧代码
为了更便捷地从ArkTS侧调用Cangjie函数,并降低仓颉侧的代码编写难度,我们需要导入互操作库。你可以通过以下代码引入它:
import ohos.ark_interop.*
import ohos.ark_interop_macro.Interop
随后,我们就可以开始编写一个简单的函数
@Interop[ArcTS]
public func hello_cangjie(name: String): String {
"Hello, ${name}!"
}
完整的代码长这样
package ohos_app_cangjie_libxxx // libxxx应该为你自己的库名,在对照的时候无需参考
internal import cj_res_libxxx.app
import ohos.ark_interop_macro.Interop
import ohos.ark_interop
@Interop[ArcTS]
public func hello_cangjie(a:String):String{
"Hello ${a}"
}
生成声明文件
编写完后,我们需要在工程目录下右击刚才创建的Cangjie Hybrid Static模块,选择Generate Cangjie-ArkTS Interop API
,并等待执行完成。
完成后,cangjie
目录下会多一个ark_interop_api
文件夹,里面就是我们需要的声明文件
// ark_interop_api.d.ts
export declare interface CustomLib {
hello_cangjie(a: string): string
}
导出仓颉库
在ets
目录下新建一个loader.ets
,并添加以下代码
import { requireCJLib } from "libark_interop_loader.so";
import { CustomLib } from "../cangjie/ark_interop_api";
let libInstance: CustomLib | undefined = undefined;
export function CJNative(): CustomLib {
if (libInstance == undefined) {
libInstance = requireCJLib('libohos_app_cangjie_libxxx.so') as CustomLib;
}
return libInstance;
}
这个文件中的CJNative
函数提供了加载仓颉库的能力,用于在ArkTS侧调用仓颉函数。在ArkTS侧,你可以通过CJNative()
函数获取到仓颉库的实例,然后调用其中的函数。
// 你的ArkTS文件
CJNative().hello_cangjie('World')
最后
至此,混合开发工程已经建立,接下来只需要将你创建的库引入到你需要的模块即可。
{
"name": "entry",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "",
"author": "",
"license": "",
"dependencies": {
"libxxx": "file:../libxxx"
}
}
调用代码如下:
promptAction.showToast({ message: CJNative().hello_cangjie("Cangjie") });
更多关于HarmonyOS鸿蒙Next中将已有的Arkts项目转为Cangjie混合开发工程的实战教程也可以访问 https://www.itying.com/category-93-b0.html
要将已有的ArkTS项目转为Cangjie混合开发工程,首先确保你的开发环境已安装最新版本的DevEco Studio。然后,在项目中创建Cangjie模块,通过File > New > Module
选择Cangjie模板。接着,将ArkTS代码逐步迁移到Cangjie模块中,利用Cangjie的API进行功能实现。最后,配置build.gradle
文件,确保ArkTS和Cangjie模块的依赖关系正确。完成迁移后,进行测试以确保功能正常。