ArkTS是HamronyOS优选的主力语言,但官方文档指南中对于Native应用开发并没有详细的描述,只有一篇Codelab可以学习(简易Native C++ 示例(ArkTS) (huawei.com)),本文将在Native应用中使用C/C++的system方法创建一个文件。

【具体实现】

Step1.

首先在DevEco Studio中选择创建native应用程序

Step2.

工程创建后整体目录如下,

首先src目录下有两个文件夹cpp和ets,cpp目录主要是用来定义对外的接口实现(index.d.ts),C++代码功能实现(hello.cpp)和编译的工具链(CMakeLists.txt)。

ets目录即为我们主要工程目录,实现应用的主体逻辑和UI界面。

默认工程目录cpp/types/libentry中有一个示例的接口add,它在index.d.ts中定义为两个数相加返回相加后的结果:

export const add: (a: number, b: number) => number;

package.json中定义了对外调用的静态库名称和接口文件

{
"name": "libentry.so",
"types": "./index.d.ts"
}

然后在ets目录下index.ets中就可以导入这个libentry.so的静态库文件,使用定义的方法了

import hilog from '@ohos.hilog';
import testNapi from 'libentry.so'//导入静态库 @Entry
@Component
struct Index {
@State message: string = 'Hello World' build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO);
hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3));//调用定义的native方法
})
}
.width('100%')
}
.height('100%')
}
}

Step3.

下面就是我们C++层代码逻辑的实现了:

首先在hello.cpp添加创建文件的函数实现,使用了strcpy和system函数,所以需要导入对应的库文件

#include <cstdlib>
#include <string.h>

这边有一个需要注意的地方是创建的文件目录路径必须是应用的私有文件目录下(/data/data/包名/文件名),否则文件不能创建成功。

static napi_value CreateFile(napi_env env, napi_callback_info info){
napi_value ret;
char command[50];
strcpy( command, "touch /data/data/com.example.nativets/1.txt" );
int result=system(command);
napi_create_double(env,result, &ret);
return ret;
}

然后我们需要在Init方法的desc[]中注册模块,“createFile”为定义接口,CreateFile是我们上面C++的方法名。

{ "createFile", nullptr, CreateFile, nullptr, nullptr, nullptr, napi_default, nullptr },

模块注册后需要在接口文件index.d.ts中添加这个接口的定义

export const createFile:()=>number;

CMakeList文件不需要修改,直接编译工程就可以在ets的index.ets中使用这个新的接口 createFile()了。

Step4.

运行程序并执行方法,验证文件是否创建成功可以通过adb命令查看系统”/data/data/包名/文件名”是否存在。

​欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

【HarmonyOS】ArkTS Native开发——使用 system函数创建文件的更多相关文章

  1. 微信小程序云开发之云函数创建

    云函数 云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写.一键上传部署即可运行后端代码. 小程序内提供了专门用于云函数调用的 API.开发者可以在云函数内使用 wx-server-sdk ...

  2. mkdir函数 (创建文件夹函数)

    mkdir函数 #include <stdio.h> int main(){ mkdir("C:\\Users\\admin\\desktop\\test"); ; }

  3. c函数创建文件和路径

    bool NewFileName(const char* filename) { size_t len; < (len = strlen(filename))) { char* tmpbuf, ...

  4. system函数遇到的问题

     这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数中调用的命令也都一切正常.就没理这个bug,以 ...

  5. system函数的总结

    最近在看APUE第10章中关于system函数的POSIX.1的实现.关于POSIX.1要求system函数忽略SIGINT和SIGQUIT,并且阻塞信号SIGCHLD的论述,理解得不是很透彻,本文就 ...

  6. UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串

    lienhua342014-10-15 ISO C 定义了 system 函数,用于在程序中执行一个命令字符串.其声明如下, #include <stdlib.h> int system( ...

  7. 第6章 进程控制(3)_wait、exec和system函数

    5. 等待函数 (1)wait和waitpid 头文件 #include <sys/types.h> #include <sys/wait.h> 函数 pid_t wait(i ...

  8. 微信小程序云开发之云函数的创建与环境配置

    云函数的使用与环境配置: 1.创建云函数 右键cloudfunctions文件选择新建Node.js云函数,云函数命名为updateVoice用于修改用户语音数量. 2.安装node.js及npm: ...

  9. Android平台Native开发与JNI机制详解

    源文链接: http://mysuperbaby.iteye.com/blog/915425 一个Native Method就是一个Java调用非Java代码的接口.一个Native Method是这 ...

  10. Native开发与JNI机制详解

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/李森 博主导读:博主不是代码大师,研究什么都很深,Java除外,所以无论什么问题,方案可以提供, ...

随机推荐

  1. Elastic:使用Postman来访问Elastic Stack

    转载自:https://elasticstack.blog.csdn.net/article/details/104982536 官方链接地址:https://www.elastic.co/guide ...

  2. Fluent插件管理

    官方文档地址:https://docs.fluentd.org/deployment/plugin-management 命令fluent-gem是Fluentd用来安装插件的,它是gem命令的包装器 ...

  3. 1- Mac和Linux远程连接服务器异常修复(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!)

    p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1) } span.s1 { font-variant-ligatures: no-c ...

  4. LOJ139 树链剖分

    题目 感觉这已经不能说是模板了吧...... 解析: 难点在于换根后对子树进行的操作,设rt为当前根节点,u为操作子树: u=rt时,就是对整棵树操作,没事么好说的. rt不在u的子树范围内,操作对象 ...

  5. FluentValidation 验证(二):WebApi 中使用 注入服务

    比如你要验证用户的时候判断一下这个用户名称在数据库是否已经存在了,这时候FluentValidation 就需要注入查询数据库 只需要注入一下就可以了 public class Login3Reque ...

  6. Java并发编程 | Synchronized原理与使用

    Java提供了多种机制实现多线程之间有需要同步执行的场景需求.其中最基本的是Synchronized ,实现上使用对象监视器( Monitor ). Java中的每个对象都是与线程可以锁定或解锁的对象 ...

  7. LcdToos设置“自动播放”和“上电自动开机”的作用

    "自动播放"功能,常用于屏演示或者老化功能,使能后,按开关点亮屏,PX01会自动按"画面定制"栏中进行自动顺序播放:开启方法如下: 打开相应的点屏工程,在&qu ...

  8. LcdTools如何实现PX01设置不同的画面不同的背光亮度

    背光驱动分两种原理:恒压模式和恒流模式.恒压背光顾名思义提供恒定电压即可,这种屏正常来讲自带背光驱动电路,只需提供背光工作电压.背光使能和背光调光占空比控制.恒流背光指屏的背光只有纯灯串,需外部提供相 ...

  9. 初识Rasp——Openrasp代码分析

    初识Rasp--Openrasp代码分析 @author:Drag0nf1y 本文首发于奇安信安全社区,现转载到个人博客. 原文链接: https://forum.butian.net/share/1 ...

  10. Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待

    为什么要设置元素等待 直白点说,怕报错,哈哈哈! 肯定有人会说,这也有点太直白了吧. 用一句通俗易懂的话就是:等待元素已被加载完全之后,再去定位该元素,就不会出现定位失败的报错了. 如何避免元素未加载 ...