HarmonyOS 鸿蒙Next .h文件的值转.ets

发布于 1周前 作者 eggper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next .h文件的值转.ets

我们想把一些关键的第三方key值(密钥等)放在.h文件中,然后应用启动的时候根据需要,从.h文件中读取到对应内容,然后赋值给.ets文件里的变量。有没有简单点的文档或者demo,没有NDK开发那么复杂,只是为了安全,将一些私钥放在头文件中,

2 回复

不支持直接将头文件中的值传递给ets,还是需要通过napi将C++中的传递给ts。 以字符串型为例,可以通过回调的形式在ts适当的位置读取C++中的string值:

cpp文件中:

static napi_value PrintFromNative(napi_env env, napi_callback_info info)
{    
    size_t argc = 1;
    napi_value args[1];//创建数组用于接收ts侧的参数
    napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);//获取ts侧的参数
    napi_value argv;//创建napi数据类型
    std::string str = "HelloArkTS";//这边可以传入您需要的秘钥值
    const char* str1 = str.c_str();
    napi_create_string_utf8(env, str1, sizeof(str), &argv);//将ts侧的数据类型转换为napi数据类型
    napi_value result = nullptr;
    napi_call_function(env, nullptr, args[0], 1, &argv, &result);//调用回调函数
    return result;
}
EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
    napi_property_descriptor desc[] = {
        { "printFromNative", nullptr, PrintFromNative, nullptr, nullptr, nullptr, napi_default, nullptr}// ArkTS接口与C++接口的绑定和映射
    };
    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
    return exports;
}
EXTERN_C_END

index.d.ts文件中:

export const printFromNative:(cb:(a:string) => string) => string;//提供JS侧的接口方法

ets文件中调用即可:

Text(this.message3)
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
          .onClick(()=>{
            hilog.info(0xFFFF, 'KQM testTag', 'print %{public}s from Native',testNapi.printFromNative((a:string)=>{
              return a
            }));
          })

关于跨语言调用具体的流程可以结合上面提供的代码片段参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/use-napi-process-V5

更多关于HarmonyOS 鸿蒙Next .h文件的值转.ets的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,将.h文件(通常包含宏定义、常量、类型声明和函数原型)中的值转换为.ets文件(ETS文件是鸿蒙系统中用于描述UI组件的扩展标记语言文件)通常涉及两个不同领域的处理:系统编程和UI描述。

.h文件中的值通常是静态的、编译时的定义,而.ets文件则用于动态构建用户界面。要将.h文件中的值用于.ets文件中,你需要通过代码桥接这两个领域。

一种常见的方法是在应用层代码中读取.h文件中定义的常量或值,并在创建或更新UI时将这些值传递给ETS模板。这可以通过在JavaScript或TypeScript中使用模块化的方式来实现,其中可以导入并读取包含这些值的文件(虽然这些文件不是直接的.h文件,但你可以通过构建工具将.h文件转换为JavaScript/TypeScript模块)。

例如,如果你有一个config.h文件定义了某个常量#define MY_CONSTANT 42,你可以在构建过程中生成一个JavaScript文件config.js,其中导出这个常量export const MY_CONSTANT = 42;。然后,在你的ETS文件中,你可以通过导入这个config.js来使用这个常量。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部