HarmonyOS5 仓颉入门:和 ArkTs 互操作
现在一般的场景是在已有 ArkTs 库中使用仓颉,所以可以将仓颉代码封装为 ArkTs 库,提供给外部使用。
原理就是互操作宏解析被注解修饰的仓颉代码,会自动生成 ArkTs 声明文件和互操作层代码。
使用步骤:
1.在 cj 文件中,针对 class、interface 和函数,使用 @Interop[ArkTS] 进行修饰,被修饰的对象是希望被 ArkTS 调用的。
2.在 DevEco Studio 中的仓颉文件或者 module 名称右键选择“Generate Cangjie-ArkTS Interop API”,会在 cangjie 目录下生成 ark_interop_api 的声明文件。
3.ArkTS 侧添加依赖并 import ark_interop_api 即可使用。
仓颉代码:
import ohos.ark_interop.*
import ohos.ark_interop_macro.*@Interop[ArkTS]
public func sub(a: Int64, b: Int64): Int64 {return a - b
}@Interop[ArkTS]
public class CjDemo {public let name: String@Interop[ArkTS, Invisible]public var id: Float64 = 1.0public init(str: String) {name = str}public func add(a: Int64, b: Int64): Int64 {return a + b}public func foo(): Float64 {return 1.0}
}
生成的代码:
export declare class CjDemo {name: stringadd(a: number, b: number): numberfoo(): number
}export declare interface CustomLib {sub(a: number, b: number): numberCjDemo: {new (str: string): CjDemo}
}
使用:
let cjLib : CustomLib = requireCJLib("libohos_app_cangjie_entry.so") as CustomLib
console.log("result" + cjLib.sub(2, 1))let class1: CjDemo = new cjLib.CjDemo("arkts call")
console.log("result " + class1.add(5,1))