最近在学习鸿蒙和Rust开发,就在网上找ArkTS调用Rust方面的文章,不过好多文章按照流程无法操作成功,决定解决问题后自己写一篇关于ArkTS调用Rust的文章,记录下过程,分享给同样需要的朋友,同时也方便自己以后查阅。
首先我们要配置鸿蒙、Rust开发环境和ohos-rs三方框架,具体安装配置流程见官方文档:
鸿蒙:developer.huawei.com/consumer/cn… 。
Rust:rust.p2hp.com/learn/get-s… 。
ohos-rs:ohos.rs/docs/basic/… 。
安装完成后开始代码编写了。
demo代码:gitee.com/hczhhm/hm_r… 。
1.首先使用鸿蒙开发工具新建一个简单的鸿蒙项目:
创建完成后在Index.ets文件内写一个简单的button按钮和事件:
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
add(){
console.log('addStart=================');
console.log('addEnd=================');
}
build() {
RelativeContainer() {
Column() {
Button('add').margin({top: 50,left: '20%',right: '20%'})
.width('60%')
.height(50)
.backgroundColor(Color.Blue)
.onClick(()=>{
this.add();
})
}.height('100%')
.width('100%')
}
.height('100%')
.width('100%')
}
}
2.然后使用ohos-rs创建Rust项目,该项目可以创建在自己想放的地方,也可以创建在刚才的鸿蒙项目目录下,看需求定:
创建项目后,里面有个默认的add函数,就先使用这个函数吧,
下面在终端执行一下ohrs build命令,生成so文件和index.d.ts文件,因为第一次build需要下载依赖,所以时间会长点,请耐心等待。
执行完成后会生成一个dist目录,目录内内容如下:
这样Rust这边的工作就完成了。
3.在鸿蒙项目的entry目录下新建一个libs目录,将Rust项目中dist目录下的东西全部拷贝到libs目录下,并在libs下创建一个oh-package.json5文件,结果如下:
并对oh-package.json5进行编辑:
{
"name": "librust_add.so",
"version": "1.0.0",
"description": "Rust implementation of librust_add",
"main": "librust_add.so"
}
4.环境配置:
在entry目录下的oh-package.json5中添加依赖配置:
"librust_add.so": "file:./libs"
配置后如下:
点击安装librust_add.so:
正常情况下是可以安装成功的,如果失败,有可能是名称不匹配或者缺少了.so后缀,如果是其他问题请查看错误信息,使用AI搜索错误问题,比搜文章更有效率。
oh_modules 目录内容如截图所示,就代表添加成功了。
5.在代码中引用: 在Index.ets文件中引用so文件,并调用函数做加法运算
import {add} from "librust_add.so"
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
add(){
console.log('addStart=================');
let result = add(1,2);
console.log('addResult=============:'+result);
console.log('addEnd=================');
}
build() {
RelativeContainer() {
Column() {
Button('add').margin({top: 50,left: '20%',right: '20%'})
.width('60%')
.height(50)
.backgroundColor(Color.Blue)
.onClick(()=>{
this.add();
})
}.height('100%')
.width('100%')
}
.height('100%')
.width('100%')
}
}
调试结果如下:
至此ArkTS调用的Rust的简单demo就完成了。如果文章中存在问题,希望大家可以指出,我们一起进步。
为了方便上传代码,我把Rust项目拷贝到鸿蒙项目目录下了,希望大家可以根据实际情况运行demo代码。
因为不是所有人都方便上github的,所以代码传到gitee了,demo地址:gitee.com/hczhhm/hm_r… 。