• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1### 交叉编译结果应用到 HAP
2
31. 使用 DevEco 创建 native C++ 工程项目;
42. 拷贝编译结果到 libs,cJSON 里的 armeabi-v7a(32 位),arm64-v8a(64 位),将里面的 so 库拷贝到工程路径下(\entry\libs)
5
6    ```bash
7    cjsontes\entry\libs> tree
8       ├─arm64-v8a
9       │  ├─libcjson.so
10       │  ├─libcjson.so.1
11       │  └─libcjson.so.1.7.15
12       └─armeabi-v7a
13          ├─libcjson.so
14          ├─libcjson.so.1
15          └─libcjson.so.1.7.15
16    ```
17
18
19
203. 拷贝对应的头文件到 cpp/thirdparty 目录下
21
22   ```bash
23   cjsontes\entry\src\main\cpp\thirdparty> tree
24   ├─arm64-v8a
25   │  ├─include
26   │    ├─cjson
27   └─armeabi-v7a
28   │  ├─include
29   │    ├─cjson
30   ```
31
32
33
344. 修改改 CMakeLists.txt
35
36   ```cmake
37   # the minimum version of CMake.
38
39   cmake_minimum_required(VERSION 3.4.1)
40   project(cjsontes)
41
42   set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
43   set(CJSON_LIB_PATH ${NATIVERENDER_ROOT_PATH}/../../../libs/${OHOS_ARCH})
44
45   include_directories(${NATIVERENDER_ROOT_PATH}
46                       ${NATIVERENDER_ROOT_PATH}/include
47                       ${NATIVERENDER_ROOT_PATH}/thirdparty/cJSON/${OHOS_ARCH}/include)
48
49   add_library(entry SHARED hello.cpp)
50   target_link_libraries(entry PUBLIC
51       libace_napi.z.so
52       libace_nd&k.z.so
53       librawfile.z.so
54       libhilog_nd&k.z.so
55       ${CJSON_LIB_PATH}/libcjson.so)
56   ```
57
58
59
605. 改 build-profile.json5 文件
61
62   ```
63   {
64     "apiType": "stageMode",
65     "buildOption": {
66       "externalNativeOptions": {
67         "path": "./src/main/cpp/CMakeLists.txt",
68         "arguments": "",
69         "cppFlags": "",
70         # 增加适配的平台
71         "abiFilters": [
72           "arm64-v8a"
73         ]
74       }
75     },
76     "targets": [
77       {
78         "name": "default",
79         "runtimeOS": "Harm&onyOS"
80       },
81       {
82         "name": "ohosTest",
83       }
84     ]
85   }
86   ```
87
88
89
906. 修改 hello.cpp:在默认的cpp文件里增加cjson的应用
91
92   ```c++
93   #include "napi/native_api.h"
94   #include "hilog/log.h"
95   #include "cjson/cJSON.h"
96
97   #define GLOBAL_RESMGR (0xFFEE)
98
99   static const char *TAG = "[cjsontest]";
100
101   static napi_value Add(napi_env env, napi_callback_info info)
102   {
103       size_t requireArgc = 2;
104       size_t argc = 2;
105       napi_value args[2] = {nullptr};
106
107       napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
108
109       napi_valuetype valuetype0;
110       napi_typeof(env, args[0], &valuetype0);
111
112       napi_valuetype valuetype1;
113       napi_typeof(env, args[1], &valuetype1);
114
115       double value0;
116       napi_get_value_double(env, args[0], &value0);
117
118       double value1;
119       napi_get_value_double(env, args[1], &value1);
120
121       // 增加cjson测试代码
122       cJSON *parsed = NULL;
123       char *content = "[\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]";
124       OH_LOG_Print(LOG_APP, LOG_ERROR, GLOBAL_RESMGR, TAG, "content %{public}s.", content);
125
126       parsed = cJSON_Parse(content);
127
128       char *jsonmsg = cJSON_Print(parsed);
129       OH_LOG_Print(LOG_APP, LOG_ERROR, GLOBAL_RESMGR, TAG, "jsonprint %{public}s.", jsonmsg);
130
131       napi_value sum;
132       napi_create_double(env, value0 + value1, &sum);
133
134       return sum;
135
136   }
137
138   EXTERN_C_START
139   static napi_value Init(napi_env env, napi_value exports)
140   {
141       napi_property_descriptor desc[] = {
142           { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr }
143       };
144       napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
145       return exports;
146   }
147   EXTERN_C_END
148
149   static napi_module demoModule = {
150       .nm_version = 1,
151       .nm_flags = 0,
152       .nm_filename = nullptr,
153       .nm_register_func = Init,
154       .nm_modname = "entry",
155       .nm_priv = ((void*)0),
156       .reserved = { 0 },
157   };
158
159   extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
160   {
161       napi_module_register(&demoModule);
162   }
163   ```
164
165
166
1677. 测试输出
168
169   ```shell
170   com.example.cjsontest  E  content ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"].
171   com.example.cjsontest  E  jsonprint ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"].
172   ```
173
174
175
176