• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 使用JSVM-API接口获取JSVM API的版本号
2<!--Kit: NDK Development-->
3<!--Subsystem: arkcompiler-->
4<!--Owner: @yuanxiaogou; @string_sz-->
5<!--Designer: @knightaoko-->
6<!--Tester: @test_lzz-->
7<!--Adviser: @fang-jinxu-->
8
9## 简介
10
11用于获取当前JSVM API的版本信息。
12
13## 接口说明
14
15| 接口                       | 功能说明                       |
16|----------------------------|--------------------------------|
17| OH_JSVM_GetVersion         | 获取JSVM运行时支持的最高JSVM API版本。 |
18| OH_JSVM_GetVMInfo          | 获取虚拟机的信息。              |
19
20## 使用示例
21
22JSVM-API接口开发流程参考[使用JSVM-API实现JS与C/C++语言交互开发流程](use-jsvm-process.md),本文仅对接口对应C++相关代码进行展示。
23
24### OH_JSVM_GetVersion && OH_JSVM_GetVMInfo
25
26获取当前环境支持的JSVM API的最高版本号和当前虚拟机的信息。
27
28cpp部分代码
29
30```cpp
31// hello.cpp
32#include <string.h>
33
34// OH_JSVM_GetVersion的样例方法
35static JSVM_Value GetVersion(JSVM_Env env, JSVM_CallbackInfo info)
36{
37    uint32_t jsVersion = 0;
38    // 调用接口,获取当前JSVM运行时支持的最高JSVM API版本
39    JSVM_CALL(OH_JSVM_GetVersion(env, &jsVersion));
40    int value = static_cast<int>(jsVersion);
41    OH_LOG_INFO(LOG_APP, "JSVM GetVersion success:%{public}d", value);
42    return nullptr;
43}
44
45// OH_JSVM_GetVMInfo的样例方法
46// 打印JSVM(JavaScript虚拟机)的各项信息
47void PrintVmInfo(JSVM_VMInfo vmInfo) {
48    OH_LOG_INFO(LOG_APP, "JSVM API apiVersion: %{public}d", vmInfo.apiVersion);
49    OH_LOG_INFO(LOG_APP, "JSVM API engine: %{public}s", vmInfo.engine);
50    OH_LOG_INFO(LOG_APP, "JSVM API version: %{public}s", vmInfo.version);
51    OH_LOG_INFO(LOG_APP, "JSVM API cachedDataVersionTag: 0x%{public}x", vmInfo.cachedDataVersionTag);
52}
53
54static JSVM_Value GetVMInfo(JSVM_Env env, JSVM_CallbackInfo info)
55{
56    // 调用接口,获取虚拟机的信息
57    JSVM_VMInfo result;
58    JSVM_CALL(OH_JSVM_GetVMInfo(&result));
59    // 输出VM虚拟机信息
60    PrintVmInfo(result);
61    return nullptr;
62}
63
64// 待执行的js代码
65static const char *srcCallNative = R"JS(getVersion();getVMInfo();)JS";
66
67// GetVersion, GetVMInfo注册回调
68static JSVM_CallbackStruct param[] = {
69    {.data = nullptr, .callback = GetVersion},
70    {.data = nullptr, .callback = GetVMInfo},
71};
72static JSVM_CallbackStruct *method = param;
73// GetVersion, GetVMInfo方法别名,供JS调用
74static JSVM_PropertyDescriptor descriptor[] = {
75    {"getVersion", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT},
76    {"getVMInfo", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT},
77};
78```
79
80预期结果:
81```
82JSVM GetVersion success:9
83JSVM API apiVersion: 1
84JSVM API engine: v8
85JSVM API version: 13.2.152.41
86JSVM API cachedDataVersionTag: 0x81ff9402
87```
88
89<!-- @[oh_jsvm_get_version_and_vm_info](https://gitcode.com/openharmony/applications_app_samples/blob/master/code/DocsSample/ArkTS/JSVMAPI/JsvmUsageGuide/UsageInstructionsTwo/getversion/src/main/cpp/hello.cpp) -->