1 /*
2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "hap_module_info.h"
17
18 #include "bundle_constants.h"
19 #include "json_util.h"
20 #include "message_parcel.h"
21 #include "nlohmann/json.hpp"
22 #include "parcel_macro.h"
23 #include "string_ex.h"
24
25 namespace OHOS {
26 namespace AppExecFwk {
27 namespace {
28 const std::string HAP_MODULE_INFO_NAME = "name";
29 const std::string HAP_MODULE_INFO_PACKAGE = "package";
30 const std::string HAP_MODULE_INFO_DESCRIPTION = "description";
31 const std::string HAP_MODULE_INFO_DESCRIPTION_ID = "descriptionId";
32 const std::string HAP_MODULE_INFO_ICON_PATH = "iconPath";
33 const std::string HAP_MODULE_INFO_ICON_ID = "iconId";
34 const std::string HAP_MODULE_INFO_LABEL = "label";
35 const std::string HAP_MODULE_INFO_LABEL_ID = "labelId";
36 const std::string HAP_MODULE_INFO_BACKGROUND_IMG = "backgroundImg";
37 const std::string HAP_MODULE_INFO_MAIN_ABILITY = "mainAbility";
38 const std::string HAP_MODULE_INFO_SRC_PATH = "srcPath";
39 const std::string HAP_MODULE_INFO_HASH_VALUE = "hashValue";
40 const std::string HAP_MODULE_INFO_SUPPORTED_MODES = "supportedModes";
41 const std::string HAP_MODULE_INFO_REQ_CAPABILITIES = "reqCapabilities";
42 const std::string HAP_MODULE_INFO_DEVICE_TYPES = "deviceTypes";
43 const std::string HAP_MODULE_INFO_ABILITY_INFOS = "abilityInfos";
44 const std::string HAP_MODULE_INFO_COLOR_MODE = "colorMode";
45 const std::string HAP_MODULE_INFO_MAIN_ELEMENTNAME = "mainElementName";
46 const std::string HAP_MODULE_INFO_PAGES = "pages";
47 const std::string HAP_MODULE_INFO_PROCESS = "process";
48 const std::string HAP_MODULE_INFO_RESOURCE_PATH = "resourcePath";
49 const std::string HAP_MODULE_INFO_SRC_ENTRANCE = "srcEntrance";
50 const std::string HAP_MODULE_INFO_UI_SYNTAX = "uiSyntax";
51 const std::string HAP_MODULE_INFO_VIRTUAL_MACHINE = "virtualMachine";
52 const std::string HAP_MODULE_INFO_DELIVERY_WITH_INSTALL = "deliveryWithInstall";
53 const std::string HAP_MODULE_INFO_INSTALLATION_FREE = "installationFree";
54 const std::string HAP_MODULE_INFO_IS_MODULE_JSON = "isModuleJson";
55 const std::string HAP_MODULE_INFO_IS_STAGE_BASED_MODEL = "isStageBasedModel";
56 const std::string HAP_MODULE_INFO_IS_REMOVABLE = "isRemovable";
57 const std::string HAP_MODULE_INFO_MODULE_TYPE = "moduleType";
58 const std::string HAP_MODULE_INFO_EXTENSION_INFOS = "extensionInfos";
59 const std::string HAP_MODULE_INFO_META_DATA = "metadata";
60 const std::string HAP_MODULE_INFO_DEPENDENCIES = "dependencies";
61 const std::string HAP_MODULE_INFO_UPGRADE_FLAG = "upgradeFlag";
62 const std::string HAP_MODULE_INFO_HAP_PATH = "hapPath";
63 const std::string HAP_MODULE_INFO_COMPILE_MODE = "compileMode";
64 const std::string HAP_MODULE_INFO_HQF_INFO = "hqfInfo";
65 const std::string HAP_MODULE_INFO_IS_LIB_ISOLATED = "isLibIsolated";
66 const std::string HAP_MODULE_INFO_NATIVE_LIBRARY_PATH = "nativeLibraryPath";
67 const std::string HAP_MODULE_INFO_CPU_ABI = "cpuAbi";
68 const std::string HAP_MODULE_INFO_MODULE_SOURCE_DIR = "moduleSourceDir";
69 const std::string HAP_MODULE_INFO_ATOMIC_SERVICE_MODULE_TYPE = "atomicServiceModuleType";
70 const std::string HAP_MODULE_INFO_PRELOADS = "preloads";
71 const std::string PRELOAD_ITEM_MODULE_NAME = "moduleName";
72 }
73
ReadFromParcel(Parcel & parcel)74 bool PreloadItem::ReadFromParcel(Parcel &parcel)
75 {
76 moduleName = Str16ToStr8(parcel.ReadString16());
77 return true;
78 }
79
Marshalling(Parcel & parcel) const80 bool PreloadItem::Marshalling(Parcel &parcel) const
81 {
82 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(moduleName));
83 return true;
84 }
85
Unmarshalling(Parcel & parcel)86 PreloadItem *PreloadItem::Unmarshalling(Parcel &parcel)
87 {
88 PreloadItem *info = new (std::nothrow) PreloadItem();
89 if (info && !info->ReadFromParcel(parcel)) {
90 APP_LOGW("read from parcel failed");
91 delete info;
92 info = nullptr;
93 }
94 return info;
95 }
96
to_json(nlohmann::json & jsonObject,const PreloadItem & preloadItem)97 void to_json(nlohmann::json &jsonObject, const PreloadItem &preloadItem)
98 {
99 jsonObject = nlohmann::json {
100 {PRELOAD_ITEM_MODULE_NAME, preloadItem.moduleName}
101 };
102 }
103
from_json(const nlohmann::json & jsonObject,PreloadItem & preloadItem)104 void from_json(const nlohmann::json &jsonObject, PreloadItem &preloadItem)
105 {
106 const auto &jsonObjectEnd = jsonObject.end();
107 int32_t parseResult = ERR_OK;
108 GetValueIfFindKey<std::string>(jsonObject,
109 jsonObjectEnd,
110 PRELOAD_ITEM_MODULE_NAME,
111 preloadItem.moduleName,
112 JsonType::STRING,
113 false,
114 parseResult,
115 ArrayType::NOT_ARRAY);
116 if (parseResult != ERR_OK) {
117 APP_LOGE("read PreloadItem from database error, error code : %{public}d", parseResult);
118 }
119 }
120
ReadFromParcel(Parcel & parcel)121 bool HapModuleInfo::ReadFromParcel(Parcel &parcel)
122 {
123 name = Str16ToStr8(parcel.ReadString16());
124 package = Str16ToStr8(parcel.ReadString16());
125 moduleName = Str16ToStr8(parcel.ReadString16());
126 description = Str16ToStr8(parcel.ReadString16());
127 descriptionId = parcel.ReadInt32();
128 iconPath = Str16ToStr8(parcel.ReadString16());
129 iconId = parcel.ReadInt32();
130 label = Str16ToStr8(parcel.ReadString16());
131 labelId = parcel.ReadInt32();
132 backgroundImg = Str16ToStr8(parcel.ReadString16());
133 mainAbility = Str16ToStr8(parcel.ReadString16());
134 srcPath = Str16ToStr8(parcel.ReadString16());
135 hashValue = Str16ToStr8(parcel.ReadString16());
136 hapPath = Str16ToStr8(parcel.ReadString16());
137 supportedModes = parcel.ReadInt32();
138
139 int32_t reqCapabilitiesSize;
140 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, reqCapabilitiesSize);
141 CONTAINER_SECURITY_VERIFY(parcel, reqCapabilitiesSize, &reqCapabilities);
142 for (auto i = 0; i < reqCapabilitiesSize; i++) {
143 reqCapabilities.emplace_back(Str16ToStr8(parcel.ReadString16()));
144 }
145
146 int32_t deviceTypesSize;
147 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, deviceTypesSize);
148 CONTAINER_SECURITY_VERIFY(parcel, deviceTypesSize, &deviceTypes);
149 for (auto i = 0; i < deviceTypesSize; i++) {
150 deviceTypes.emplace_back(Str16ToStr8(parcel.ReadString16()));
151 }
152
153 int32_t dependenciesSize;
154 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, dependenciesSize);
155 CONTAINER_SECURITY_VERIFY(parcel, dependenciesSize, &dependencies);
156 for (auto i = 0; i < dependenciesSize; i++) {
157 dependencies.emplace_back(Str16ToStr8(parcel.ReadString16()));
158 }
159
160 int32_t abilityInfosSize;
161 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, abilityInfosSize);
162 CONTAINER_SECURITY_VERIFY(parcel, abilityInfosSize, &abilityInfos);
163 for (auto i = 0; i < abilityInfosSize; i++) {
164 std::unique_ptr<AbilityInfo> abilityInfo(parcel.ReadParcelable<AbilityInfo>());
165 if (!abilityInfo) {
166 APP_LOGE("ReadParcelable<AbilityInfo> failed");
167 return false;
168 }
169 abilityInfos.emplace_back(*abilityInfo);
170 }
171
172 colorMode = static_cast<ModuleColorMode>(parcel.ReadInt32());
173 bundleName = Str16ToStr8(parcel.ReadString16());
174 mainElementName = Str16ToStr8(parcel.ReadString16());
175 pages = Str16ToStr8(parcel.ReadString16());
176 process = Str16ToStr8(parcel.ReadString16());
177 resourcePath = Str16ToStr8(parcel.ReadString16());
178 srcEntrance = Str16ToStr8(parcel.ReadString16());
179 uiSyntax = Str16ToStr8(parcel.ReadString16());
180 virtualMachine = Str16ToStr8(parcel.ReadString16());
181 deliveryWithInstall = parcel.ReadBool();
182 installationFree = parcel.ReadBool();
183 isModuleJson = parcel.ReadBool();
184 isStageBasedModel = parcel.ReadBool();
185
186 int32_t isRemovableSize;
187 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, isRemovableSize);
188 CONTAINER_SECURITY_VERIFY(parcel, isRemovableSize, &isRemovable);
189 for (auto i = 0; i < isRemovableSize; i++) {
190 std::string key = Str16ToStr8(parcel.ReadString16());
191 bool isRemove = parcel.ReadBool();
192 isRemovable[key] = isRemove;
193 }
194 moduleType = static_cast<ModuleType>(parcel.ReadInt32());
195
196 int32_t extensionInfosSize;
197 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, extensionInfosSize);
198 CONTAINER_SECURITY_VERIFY(parcel, extensionInfosSize, &extensionInfos);
199 for (auto i = 0; i < extensionInfosSize; i++) {
200 std::unique_ptr<ExtensionAbilityInfo> extensionAbilityInfo(parcel.ReadParcelable<ExtensionAbilityInfo>());
201 if (!extensionAbilityInfo) {
202 APP_LOGE("ReadParcelable<ExtensionAbilityInfo> failed");
203 return false;
204 }
205 extensionInfos.emplace_back(*extensionAbilityInfo);
206 }
207
208 int32_t metadataSize;
209 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metadataSize);
210 CONTAINER_SECURITY_VERIFY(parcel, metadataSize, &metadata);
211 for (int32_t i = 0; i < metadataSize; ++i) {
212 std::unique_ptr<Metadata> meta(parcel.ReadParcelable<Metadata>());
213 if (!meta) {
214 APP_LOGE("ReadParcelable<Metadata> failed");
215 return false;
216 }
217 metadata.emplace_back(*meta);
218 }
219
220 upgradeFlag = parcel.ReadInt32();
221 compileMode = static_cast<CompileMode>(parcel.ReadInt32());
222 std::unique_ptr<HqfInfo> hqfInfoPtr(parcel.ReadParcelable<HqfInfo>());
223 if (hqfInfoPtr == nullptr) {
224 APP_LOGE("ReadParcelable<HqfInfo> failed");
225 return false;
226 }
227 hqfInfo = *hqfInfoPtr;
228 isLibIsolated = parcel.ReadBool();
229 nativeLibraryPath = Str16ToStr8(parcel.ReadString16());
230 cpuAbi = Str16ToStr8(parcel.ReadString16());
231 moduleSourceDir = Str16ToStr8(parcel.ReadString16());
232
233 atomicServiceModuleType = static_cast<AtomicServiceModuleType>(parcel.ReadInt32());
234
235 int32_t preloadsSize;
236 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, preloadsSize);
237 CONTAINER_SECURITY_VERIFY(parcel, preloadsSize, &preloads);
238 for (int32_t i = 0; i < preloadsSize; ++i) {
239 std::unique_ptr<PreloadItem> preload(parcel.ReadParcelable<PreloadItem>());
240 if (!preload) {
241 APP_LOGE("ReadParcelable<PreloadItem> failed");
242 return false;
243 }
244 preloads.emplace_back(*preload);
245 }
246 return true;
247 }
248
Unmarshalling(Parcel & parcel)249 HapModuleInfo *HapModuleInfo::Unmarshalling(Parcel &parcel)
250 {
251 HapModuleInfo *info = new (std::nothrow) HapModuleInfo();
252 if (info && !info->ReadFromParcel(parcel)) {
253 APP_LOGW("read from parcel failed");
254 delete info;
255 info = nullptr;
256 }
257 return info;
258 }
259
Marshalling(Parcel & parcel) const260 bool HapModuleInfo::Marshalling(Parcel &parcel) const
261 {
262 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(name));
263 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(package));
264 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(moduleName));
265 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(description));
266 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, descriptionId);
267 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(iconPath));
268 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, iconId);
269 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(label));
270 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, labelId);
271 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(backgroundImg));
272 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(mainAbility));
273 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(srcPath));
274 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(hashValue));
275 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(hapPath));
276 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, supportedModes);
277
278 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, reqCapabilities.size());
279 for (auto &reqCapability : reqCapabilities) {
280 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(reqCapability));
281 }
282
283 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, deviceTypes.size());
284 for (auto &deviceType : deviceTypes) {
285 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(deviceType));
286 }
287
288 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, dependencies.size());
289 for (auto &dependency : dependencies) {
290 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(dependency));
291 }
292
293 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, abilityInfos.size());
294 for (auto &abilityInfo : abilityInfos) {
295 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &abilityInfo);
296 }
297
298 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(colorMode));
299 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(bundleName));
300 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(mainElementName));
301 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(pages));
302 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(process));
303 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(resourcePath));
304 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(srcEntrance));
305 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uiSyntax));
306 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(virtualMachine));
307 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, deliveryWithInstall);
308 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, installationFree);
309 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isModuleJson);
310 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isStageBasedModel);
311
312 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, isRemovable.size());
313 for (auto &item : isRemovable) {
314 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(item.first));
315 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, item.second);
316 }
317
318 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(moduleType));
319
320 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, extensionInfos.size());
321 for (auto &extensionInfo : extensionInfos) {
322 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &extensionInfo);
323 }
324
325 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metadata.size());
326 for (auto &mete : metadata) {
327 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &mete);
328 }
329
330 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, upgradeFlag);
331 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(compileMode));
332 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &hqfInfo);
333 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isLibIsolated);
334 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(nativeLibraryPath));
335 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(cpuAbi));
336 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(moduleSourceDir));
337
338 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(atomicServiceModuleType));
339
340 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, preloads.size());
341 for (auto &item : preloads) {
342 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &item);
343 }
344 return true;
345 }
346
to_json(nlohmann::json & jsonObject,const HapModuleInfo & hapModuleInfo)347 void to_json(nlohmann::json &jsonObject, const HapModuleInfo &hapModuleInfo)
348 {
349 jsonObject = nlohmann::json {
350 {HAP_MODULE_INFO_NAME, hapModuleInfo.name},
351 {HAP_MODULE_INFO_PACKAGE, hapModuleInfo.package},
352 {Constants::MODULE_NAME, hapModuleInfo.moduleName},
353 {HAP_MODULE_INFO_DESCRIPTION, hapModuleInfo.description},
354 {HAP_MODULE_INFO_DESCRIPTION_ID, hapModuleInfo.descriptionId},
355 {HAP_MODULE_INFO_ICON_PATH, hapModuleInfo.iconPath},
356 {HAP_MODULE_INFO_ICON_ID, hapModuleInfo.iconId},
357 {HAP_MODULE_INFO_LABEL, hapModuleInfo.label},
358 {HAP_MODULE_INFO_LABEL_ID, hapModuleInfo.labelId},
359 {HAP_MODULE_INFO_BACKGROUND_IMG, hapModuleInfo.backgroundImg},
360 {HAP_MODULE_INFO_MAIN_ABILITY, hapModuleInfo.mainAbility},
361 {HAP_MODULE_INFO_SRC_PATH, hapModuleInfo.srcPath},
362 {HAP_MODULE_INFO_HASH_VALUE, hapModuleInfo.hashValue},
363 {HAP_MODULE_INFO_HAP_PATH, hapModuleInfo.hapPath},
364 {HAP_MODULE_INFO_SUPPORTED_MODES, hapModuleInfo.supportedModes},
365 {HAP_MODULE_INFO_REQ_CAPABILITIES, hapModuleInfo.reqCapabilities},
366 {HAP_MODULE_INFO_DEVICE_TYPES, hapModuleInfo.deviceTypes},
367 {HAP_MODULE_INFO_ABILITY_INFOS, hapModuleInfo.abilityInfos},
368 {HAP_MODULE_INFO_COLOR_MODE, hapModuleInfo.colorMode},
369 {Constants::BUNDLE_NAME, hapModuleInfo.bundleName},
370 {HAP_MODULE_INFO_MAIN_ELEMENTNAME, hapModuleInfo.mainElementName},
371 {HAP_MODULE_INFO_PAGES, hapModuleInfo.pages},
372 {HAP_MODULE_INFO_PROCESS, hapModuleInfo.process},
373 {HAP_MODULE_INFO_RESOURCE_PATH, hapModuleInfo.resourcePath},
374 {HAP_MODULE_INFO_SRC_ENTRANCE, hapModuleInfo.srcEntrance},
375 {HAP_MODULE_INFO_UI_SYNTAX, hapModuleInfo.uiSyntax},
376 {HAP_MODULE_INFO_VIRTUAL_MACHINE, hapModuleInfo.virtualMachine},
377 {HAP_MODULE_INFO_DELIVERY_WITH_INSTALL, hapModuleInfo.deliveryWithInstall},
378 {HAP_MODULE_INFO_INSTALLATION_FREE, hapModuleInfo.installationFree},
379 {HAP_MODULE_INFO_IS_MODULE_JSON, hapModuleInfo.isModuleJson},
380 {HAP_MODULE_INFO_IS_STAGE_BASED_MODEL, hapModuleInfo.isStageBasedModel},
381 {HAP_MODULE_INFO_IS_REMOVABLE, hapModuleInfo.isRemovable},
382 {HAP_MODULE_INFO_UPGRADE_FLAG, hapModuleInfo.upgradeFlag},
383 {HAP_MODULE_INFO_MODULE_TYPE, hapModuleInfo.moduleType},
384 {HAP_MODULE_INFO_EXTENSION_INFOS, hapModuleInfo.extensionInfos},
385 {HAP_MODULE_INFO_META_DATA, hapModuleInfo.metadata},
386 {HAP_MODULE_INFO_DEPENDENCIES, hapModuleInfo.dependencies},
387 {HAP_MODULE_INFO_COMPILE_MODE, hapModuleInfo.compileMode},
388 {HAP_MODULE_INFO_HQF_INFO, hapModuleInfo.hqfInfo},
389 {HAP_MODULE_INFO_IS_LIB_ISOLATED, hapModuleInfo.isLibIsolated},
390 {HAP_MODULE_INFO_NATIVE_LIBRARY_PATH, hapModuleInfo.nativeLibraryPath},
391 {HAP_MODULE_INFO_CPU_ABI, hapModuleInfo.cpuAbi},
392 {HAP_MODULE_INFO_MODULE_SOURCE_DIR, hapModuleInfo.moduleSourceDir},
393 {HAP_MODULE_INFO_ATOMIC_SERVICE_MODULE_TYPE, hapModuleInfo.atomicServiceModuleType},
394 {HAP_MODULE_INFO_PRELOADS, hapModuleInfo.preloads}
395 };
396 }
397
from_json(const nlohmann::json & jsonObject,HapModuleInfo & hapModuleInfo)398 void from_json(const nlohmann::json &jsonObject, HapModuleInfo &hapModuleInfo)
399 {
400 const auto &jsonObjectEnd = jsonObject.end();
401 int32_t parseResult = ERR_OK;
402 GetValueIfFindKey<std::string>(jsonObject,
403 jsonObjectEnd,
404 HAP_MODULE_INFO_NAME,
405 hapModuleInfo.name,
406 JsonType::STRING,
407 false,
408 parseResult,
409 ArrayType::NOT_ARRAY);
410 GetValueIfFindKey<std::string>(jsonObject,
411 jsonObjectEnd,
412 HAP_MODULE_INFO_PACKAGE,
413 hapModuleInfo.package,
414 JsonType::STRING,
415 false,
416 parseResult,
417 ArrayType::NOT_ARRAY);
418 GetValueIfFindKey<std::string>(jsonObject,
419 jsonObjectEnd,
420 Constants::MODULE_NAME,
421 hapModuleInfo.moduleName,
422 JsonType::STRING,
423 false,
424 parseResult,
425 ArrayType::NOT_ARRAY);
426 GetValueIfFindKey<std::string>(jsonObject,
427 jsonObjectEnd,
428 HAP_MODULE_INFO_DESCRIPTION,
429 hapModuleInfo.description,
430 JsonType::STRING,
431 false,
432 parseResult,
433 ArrayType::NOT_ARRAY);
434 GetValueIfFindKey<int>(jsonObject,
435 jsonObjectEnd,
436 HAP_MODULE_INFO_DESCRIPTION_ID,
437 hapModuleInfo.descriptionId,
438 JsonType::NUMBER,
439 false,
440 parseResult,
441 ArrayType::NOT_ARRAY);
442 GetValueIfFindKey<std::string>(jsonObject,
443 jsonObjectEnd,
444 HAP_MODULE_INFO_ICON_PATH,
445 hapModuleInfo.iconPath,
446 JsonType::STRING,
447 false,
448 parseResult,
449 ArrayType::NOT_ARRAY);
450 GetValueIfFindKey<int>(jsonObject,
451 jsonObjectEnd,
452 HAP_MODULE_INFO_ICON_ID,
453 hapModuleInfo.iconId,
454 JsonType::NUMBER,
455 false,
456 parseResult,
457 ArrayType::NOT_ARRAY);
458 GetValueIfFindKey<std::string>(jsonObject,
459 jsonObjectEnd,
460 HAP_MODULE_INFO_LABEL,
461 hapModuleInfo.label,
462 JsonType::STRING,
463 false,
464 parseResult,
465 ArrayType::NOT_ARRAY);
466 GetValueIfFindKey<int>(jsonObject,
467 jsonObjectEnd,
468 HAP_MODULE_INFO_LABEL_ID,
469 hapModuleInfo.labelId,
470 JsonType::NUMBER,
471 false,
472 parseResult,
473 ArrayType::NOT_ARRAY);
474 GetValueIfFindKey<std::string>(jsonObject,
475 jsonObjectEnd,
476 HAP_MODULE_INFO_BACKGROUND_IMG,
477 hapModuleInfo.backgroundImg,
478 JsonType::STRING,
479 false,
480 parseResult,
481 ArrayType::NOT_ARRAY);
482 GetValueIfFindKey<std::string>(jsonObject,
483 jsonObjectEnd,
484 HAP_MODULE_INFO_MAIN_ABILITY,
485 hapModuleInfo.mainAbility,
486 JsonType::STRING,
487 false,
488 parseResult,
489 ArrayType::NOT_ARRAY);
490 GetValueIfFindKey<std::string>(jsonObject,
491 jsonObjectEnd,
492 HAP_MODULE_INFO_SRC_PATH,
493 hapModuleInfo.srcPath,
494 JsonType::STRING,
495 false,
496 parseResult,
497 ArrayType::NOT_ARRAY);
498 GetValueIfFindKey<std::string>(jsonObject,
499 jsonObjectEnd,
500 HAP_MODULE_INFO_HASH_VALUE,
501 hapModuleInfo.hashValue,
502 JsonType::STRING,
503 false,
504 parseResult,
505 ArrayType::NOT_ARRAY);
506 GetValueIfFindKey<std::string>(jsonObject,
507 jsonObjectEnd,
508 HAP_MODULE_INFO_HAP_PATH,
509 hapModuleInfo.hapPath,
510 JsonType::STRING,
511 false,
512 parseResult,
513 ArrayType::NOT_ARRAY);
514 GetValueIfFindKey<int>(jsonObject,
515 jsonObjectEnd,
516 HAP_MODULE_INFO_SUPPORTED_MODES,
517 hapModuleInfo.supportedModes,
518 JsonType::NUMBER,
519 false,
520 parseResult,
521 ArrayType::NOT_ARRAY);
522 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
523 jsonObjectEnd,
524 HAP_MODULE_INFO_REQ_CAPABILITIES,
525 hapModuleInfo.reqCapabilities,
526 JsonType::ARRAY,
527 false,
528 parseResult,
529 ArrayType::STRING);
530 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
531 jsonObjectEnd,
532 HAP_MODULE_INFO_DEVICE_TYPES,
533 hapModuleInfo.deviceTypes,
534 JsonType::ARRAY,
535 false,
536 parseResult,
537 ArrayType::STRING);
538 GetValueIfFindKey<std::vector<AbilityInfo>>(jsonObject,
539 jsonObjectEnd,
540 HAP_MODULE_INFO_ABILITY_INFOS,
541 hapModuleInfo.abilityInfos,
542 JsonType::ARRAY,
543 false,
544 parseResult,
545 ArrayType::OBJECT);
546 GetValueIfFindKey<ModuleColorMode>(jsonObject,
547 jsonObjectEnd,
548 HAP_MODULE_INFO_COLOR_MODE,
549 hapModuleInfo.colorMode,
550 JsonType::NUMBER,
551 false,
552 parseResult,
553 ArrayType::NOT_ARRAY);
554 GetValueIfFindKey<std::string>(jsonObject,
555 jsonObjectEnd,
556 Constants::BUNDLE_NAME,
557 hapModuleInfo.bundleName,
558 JsonType::STRING,
559 false,
560 parseResult,
561 ArrayType::NOT_ARRAY);
562 GetValueIfFindKey<std::string>(jsonObject,
563 jsonObjectEnd,
564 HAP_MODULE_INFO_MAIN_ELEMENTNAME,
565 hapModuleInfo.mainElementName,
566 JsonType::STRING,
567 false,
568 parseResult,
569 ArrayType::NOT_ARRAY);
570 GetValueIfFindKey<std::string>(jsonObject,
571 jsonObjectEnd,
572 HAP_MODULE_INFO_PAGES,
573 hapModuleInfo.pages,
574 JsonType::STRING,
575 false,
576 parseResult,
577 ArrayType::NOT_ARRAY);
578 GetValueIfFindKey<std::string>(jsonObject,
579 jsonObjectEnd,
580 HAP_MODULE_INFO_PROCESS,
581 hapModuleInfo.process,
582 JsonType::STRING,
583 false,
584 parseResult,
585 ArrayType::NOT_ARRAY);
586 GetValueIfFindKey<std::string>(jsonObject,
587 jsonObjectEnd,
588 HAP_MODULE_INFO_RESOURCE_PATH,
589 hapModuleInfo.resourcePath,
590 JsonType::STRING,
591 false,
592 parseResult,
593 ArrayType::NOT_ARRAY);
594 GetValueIfFindKey<std::string>(jsonObject,
595 jsonObjectEnd,
596 HAP_MODULE_INFO_SRC_ENTRANCE,
597 hapModuleInfo.srcEntrance,
598 JsonType::STRING,
599 false,
600 parseResult,
601 ArrayType::NOT_ARRAY);
602 GetValueIfFindKey<std::string>(jsonObject,
603 jsonObjectEnd,
604 HAP_MODULE_INFO_UI_SYNTAX,
605 hapModuleInfo.uiSyntax,
606 JsonType::STRING,
607 false,
608 parseResult,
609 ArrayType::NOT_ARRAY);
610 GetValueIfFindKey<std::string>(jsonObject,
611 jsonObjectEnd,
612 HAP_MODULE_INFO_VIRTUAL_MACHINE,
613 hapModuleInfo.virtualMachine,
614 JsonType::STRING,
615 false,
616 parseResult,
617 ArrayType::NOT_ARRAY);
618 GetValueIfFindKey<bool>(jsonObject,
619 jsonObjectEnd,
620 HAP_MODULE_INFO_DELIVERY_WITH_INSTALL,
621 hapModuleInfo.deliveryWithInstall,
622 JsonType::BOOLEAN,
623 false,
624 parseResult,
625 ArrayType::NOT_ARRAY);
626 GetValueIfFindKey<bool>(jsonObject,
627 jsonObjectEnd,
628 HAP_MODULE_INFO_INSTALLATION_FREE,
629 hapModuleInfo.installationFree,
630 JsonType::BOOLEAN,
631 false,
632 parseResult,
633 ArrayType::NOT_ARRAY);
634 GetValueIfFindKey<bool>(jsonObject,
635 jsonObjectEnd,
636 HAP_MODULE_INFO_IS_MODULE_JSON,
637 hapModuleInfo.isModuleJson,
638 JsonType::BOOLEAN,
639 false,
640 parseResult,
641 ArrayType::NOT_ARRAY);
642 GetValueIfFindKey<bool>(jsonObject,
643 jsonObjectEnd,
644 HAP_MODULE_INFO_IS_STAGE_BASED_MODEL,
645 hapModuleInfo.isStageBasedModel,
646 JsonType::BOOLEAN,
647 false,
648 parseResult,
649 ArrayType::NOT_ARRAY);
650 GetValueIfFindKey<std::map<std::string, bool>>(jsonObject,
651 jsonObjectEnd,
652 HAP_MODULE_INFO_IS_REMOVABLE,
653 hapModuleInfo.isRemovable,
654 JsonType::OBJECT,
655 false,
656 parseResult,
657 ArrayType::NOT_ARRAY);
658 GetValueIfFindKey<int32_t>(jsonObject,
659 jsonObjectEnd,
660 HAP_MODULE_INFO_UPGRADE_FLAG,
661 hapModuleInfo.upgradeFlag,
662 JsonType::NUMBER,
663 false,
664 parseResult,
665 ArrayType::NOT_ARRAY);
666 GetValueIfFindKey<ModuleType>(jsonObject,
667 jsonObjectEnd,
668 HAP_MODULE_INFO_MODULE_TYPE,
669 hapModuleInfo.moduleType,
670 JsonType::NUMBER,
671 false,
672 parseResult,
673 ArrayType::NOT_ARRAY);
674 GetValueIfFindKey<std::vector<ExtensionAbilityInfo>>(jsonObject,
675 jsonObjectEnd,
676 HAP_MODULE_INFO_EXTENSION_INFOS,
677 hapModuleInfo.extensionInfos,
678 JsonType::ARRAY,
679 false,
680 parseResult,
681 ArrayType::OBJECT);
682 GetValueIfFindKey<std::vector<Metadata>>(jsonObject,
683 jsonObjectEnd,
684 HAP_MODULE_INFO_META_DATA,
685 hapModuleInfo.metadata,
686 JsonType::ARRAY,
687 false,
688 parseResult,
689 ArrayType::OBJECT);
690 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
691 jsonObjectEnd,
692 HAP_MODULE_INFO_DEPENDENCIES,
693 hapModuleInfo.dependencies,
694 JsonType::ARRAY,
695 false,
696 parseResult,
697 ArrayType::STRING);
698 GetValueIfFindKey<CompileMode>(jsonObject,
699 jsonObjectEnd,
700 HAP_MODULE_INFO_COMPILE_MODE,
701 hapModuleInfo.compileMode,
702 JsonType::NUMBER,
703 false,
704 parseResult,
705 ArrayType::NOT_ARRAY);
706 GetValueIfFindKey<HqfInfo>(jsonObject,
707 jsonObjectEnd,
708 HAP_MODULE_INFO_HQF_INFO,
709 hapModuleInfo.hqfInfo,
710 JsonType::OBJECT,
711 false,
712 parseResult,
713 ArrayType::NOT_ARRAY);
714 GetValueIfFindKey<bool>(jsonObject,
715 jsonObjectEnd,
716 HAP_MODULE_INFO_IS_LIB_ISOLATED,
717 hapModuleInfo.isLibIsolated,
718 JsonType::BOOLEAN,
719 false,
720 parseResult,
721 ArrayType::NOT_ARRAY);
722 GetValueIfFindKey<std::string>(jsonObject,
723 jsonObjectEnd,
724 HAP_MODULE_INFO_NATIVE_LIBRARY_PATH,
725 hapModuleInfo.nativeLibraryPath,
726 JsonType::STRING,
727 false,
728 parseResult,
729 ArrayType::NOT_ARRAY);
730 GetValueIfFindKey<std::string>(jsonObject,
731 jsonObjectEnd,
732 HAP_MODULE_INFO_CPU_ABI,
733 hapModuleInfo.cpuAbi,
734 JsonType::STRING,
735 false,
736 parseResult,
737 ArrayType::NOT_ARRAY);
738 GetValueIfFindKey<std::string>(jsonObject,
739 jsonObjectEnd,
740 HAP_MODULE_INFO_MODULE_SOURCE_DIR,
741 hapModuleInfo.moduleSourceDir,
742 JsonType::STRING,
743 false,
744 parseResult,
745 ArrayType::NOT_ARRAY);
746 GetValueIfFindKey<AtomicServiceModuleType>(jsonObject,
747 jsonObjectEnd,
748 HAP_MODULE_INFO_ATOMIC_SERVICE_MODULE_TYPE,
749 hapModuleInfo.atomicServiceModuleType,
750 JsonType::NUMBER,
751 false,
752 parseResult,
753 ArrayType::NOT_ARRAY);
754 GetValueIfFindKey<std::vector<PreloadItem>>(jsonObject,
755 jsonObjectEnd,
756 HAP_MODULE_INFO_PRELOADS,
757 hapModuleInfo.preloads,
758 JsonType::ARRAY,
759 false,
760 parseResult,
761 ArrayType::OBJECT);
762 if (parseResult != ERR_OK) {
763 APP_LOGW("HapModuleInfo from_json error, error code : %{public}d", parseResult);
764 }
765 }
766 } // namespace AppExecFwk
767 } // namespace OHOS
768