相关问题
如何使用JSVM-API接口创建多个引擎执行JS代码并销毁
355浏览 • 1回复 待解决
基于JSVM创建引擎执行JS代码并销毁
417浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中使用JSVM-API编译和执行JavaScript代码
55浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何使用JSVM-API创建和管理JavaScript执行上下文
57浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙应用中利用JSVM-API进行JS对象属性操作
54浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙应用中通过JSVM-API解析和序列化JSON
51浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙应用中如何使用JSVM-API进行内存管理
39浏览 • 1回复 待解决
#鸿蒙通关秘籍#怎样在鸿蒙环境中使用JSVM-API进行Promise操作
55浏览 • 1回复 待解决
JSVM-API的应用场景有哪些?
419浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何创建一个Task并指定执行的函数?
217浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何执行创建的Task?
163浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙API 13中如何使用TaskPool同时执行多个耗时任务?
108浏览 • 1回复 待解决
HarmonyOS js引擎是否支持执行下发的abc文件
50浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何通过树形图(Tree)分析代码执行路径?
52浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何通过Node-API进行多个C++线程的数据共享?
104浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何在HarmonyOS Next中创建多个页面并实现页面之间的路由跳转?
140浏览 • 0回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中管理并执行后台任务?
54浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中通过Node-API接口创建ArkTs运行时环境?
56浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙应用中如何创建并使用视频组件?
101浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙OS中创建并使用Shape组件?
91浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中创建并管理异步事件循环?
137浏览 • 1回复 待解决
ArkUI如何通过代码动态创建组件
2489浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何创建空应用并配置HarmonyOS项目属性?
81浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在Canvas上创建并使用径向渐变?
75浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何解读并复制ToDoList的Demo代码?
71浏览 • 1回复 待解决
在鸿蒙开发中,可以利用createJsCore方法创建多个JS基础运行时环境并执行JS代码。以下步骤展示了如何实现这一过程:
接口声明和编译配置
在index.d.ts文件中,声明接口:
typescript export const createJsCore: (fun: Function) => number; export const releaseJsCore: (a: number) => void; export const evalUateJS: (a: number, str: string) => string;
为项目添加CMakeLists.txt编译配置:
cmake cmake_minimum_required(VERSION 3.4.1) project(MyApplication)
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
if(DEFINED PACKAGE_FIND_FILE) include(${PACKAGE_FIND_FILE}) endif()
include_directories(${NATIVERENDER_ROOT_PATH} ${NATIVERENDER_ROOT_PATH}/include)
add_library(entry SHARED create_jsvm_runtime.cpp) target_link_libraries(entry PUBLIC libace_napi.z.so libjsvm.so libhilog_ndk.z.so)
创建多个运行时环境并运行JS代码
使用create_jsvm_runtime.cpp实现多个JS运行时环境。以下为关键代码片段:
cpp #include "napi/native_api.h" #include "ark_runtime/jsvm.h" #include "common.h"
#include <map> #include <deque> #include <string> #include <mutex> #include <hilog/log.h>
using namespace std;
static map<int, JSVM_VM*> g_vmMap; static map<int, JSVM_Env*> g_envMap; static uint32_t ENVTAG_NUMBER = 0; static std::mutex envMapLock;
static napi_value CreateJsCore(napi_env env1, napi_callback_info info) { size_t argc = 1; napi_value argv[1]; napi_get_cb_info(env1, info, &argc, argv, nullptr, nullptr); if (argc < 1) return nullptr;
}
static napi_value EvalUateJS(napi_env env, napi_callback_info info) { size_t argc = 2; napi_value args[2]; napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); uint32_t envId; napi_get_value_uint32(env, args[0], &envId);
}
模块注册
在create_jsvm_runtime.cpp文件中注册模块:
cpp EXTERN_C_START static napi_value Init(napi_env env, napi_value exports) { napi_property_descriptor desc[] = { {"createJsCore", nullptr, CreateJsCore, nullptr, nullptr, nullptr, napi_default, nullptr}, {"releaseJsCore", nullptr, ReleaseJsCore, nullptr, nullptr, nullptr, napi_default, nullptr}, {"evalUateJS", nullptr, EvalUateJS, nullptr, nullptr, nullptr, napi_default, nullptr} }; napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); return exports; } EXTERN_C_END
static napi_module demoModule = { .nm_version = 1, .nm_flags = 0, .nm_filename = nullptr, .nm_register_func = Init, .nm_modname = "entry", .nm_priv = ((void *)0), .reserved = {0}, };
extern "C" attribute((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }
创建多个JSVM运行环境并通过evalUateJS方法执行代码,为应用开发提供了更灵活的方案。