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 for (auto i = 0; i < reqCapabilitiesSize; i++) {
142 reqCapabilities.emplace_back(Str16ToStr8(parcel.ReadString16()));
143 }
144
145 int32_t deviceTypesSize;
146 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, deviceTypesSize);
147 for (auto i = 0; i < deviceTypesSize; i++) {
148 deviceTypes.emplace_back(Str16ToStr8(parcel.ReadString16()));
149 }
150
151 int32_t dependenciesSize;
152 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, dependenciesSize);
153 for (auto i = 0; i < dependenciesSize; i++) {
154 dependencies.emplace_back(Str16ToStr8(parcel.ReadString16()));
155 }
156
157 int32_t abilityInfosSize;
158 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, abilityInfosSize);
159 for (auto i = 0; i < abilityInfosSize; i++) {
160 std::unique_ptr<AbilityInfo> abilityInfo(parcel.ReadParcelable<AbilityInfo>());
161 if (!abilityInfo) {
162 APP_LOGE("ReadParcelable<AbilityInfo> failed");
163 return false;
164 }
165 abilityInfos.emplace_back(*abilityInfo);
166 }
167
168 colorMode = static_cast<ModuleColorMode>(parcel.ReadInt32());
169 bundleName = Str16ToStr8(parcel.ReadString16());
170 mainElementName = Str16ToStr8(parcel.ReadString16());
171 pages = Str16ToStr8(parcel.ReadString16());
172 process = Str16ToStr8(parcel.ReadString16());
173 resourcePath = Str16ToStr8(parcel.ReadString16());
174 srcEntrance = Str16ToStr8(parcel.ReadString16());
175 uiSyntax = Str16ToStr8(parcel.ReadString16());
176 virtualMachine = Str16ToStr8(parcel.ReadString16());
177 deliveryWithInstall = parcel.ReadBool();
178 installationFree = parcel.ReadBool();
179 isModuleJson = parcel.ReadBool();
180 isStageBasedModel = parcel.ReadBool();
181
182 int32_t isRemovableSize;
183 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, isRemovableSize);
184 for (auto i = 0; i < isRemovableSize; i++) {
185 std::string key = Str16ToStr8(parcel.ReadString16());
186 bool isRemove = parcel.ReadBool();
187 isRemovable[key] = isRemove;
188 }
189 moduleType = static_cast<ModuleType>(parcel.ReadInt32());
190
191 int32_t extensionInfosSize;
192 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, extensionInfosSize);
193 for (auto i = 0; i < extensionInfosSize; i++) {
194 std::unique_ptr<ExtensionAbilityInfo> extensionAbilityInfo(parcel.ReadParcelable<ExtensionAbilityInfo>());
195 if (!extensionAbilityInfo) {
196 APP_LOGE("ReadParcelable<ExtensionAbilityInfo> failed");
197 return false;
198 }
199 extensionInfos.emplace_back(*extensionAbilityInfo);
200 }
201
202 int32_t metadataSize;
203 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metadataSize);
204 for (int32_t i = 0; i < metadataSize; ++i) {
205 std::unique_ptr<Metadata> meta(parcel.ReadParcelable<Metadata>());
206 if (!meta) {
207 APP_LOGE("ReadParcelable<Metadata> failed");
208 return false;
209 }
210 metadata.emplace_back(*meta);
211 }
212
213 upgradeFlag = parcel.ReadInt32();
214 compileMode = static_cast<CompileMode>(parcel.ReadInt32());
215 std::unique_ptr<HqfInfo> hqfInfoPtr(parcel.ReadParcelable<HqfInfo>());
216 if (hqfInfoPtr == nullptr) {
217 APP_LOGE("ReadParcelable<HqfInfo> failed");
218 return false;
219 }
220 hqfInfo = *hqfInfoPtr;
221 isLibIsolated = parcel.ReadBool();
222 nativeLibraryPath = Str16ToStr8(parcel.ReadString16());
223 cpuAbi = Str16ToStr8(parcel.ReadString16());
224 moduleSourceDir = Str16ToStr8(parcel.ReadString16());
225
226 atomicServiceModuleType = static_cast<AtomicServiceModuleType>(parcel.ReadInt32());
227
228 int32_t preloadsSize;
229 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, preloadsSize);
230 for (int32_t i = 0; i < preloadsSize; ++i) {
231 std::unique_ptr<PreloadItem> preload(parcel.ReadParcelable<PreloadItem>());
232 if (!preload) {
233 APP_LOGE("ReadParcelable<PreloadItem> failed");
234 return false;
235 }
236 preloads.emplace_back(*preload);
237 }
238 return true;
239 }
240
Unmarshalling(Parcel & parcel)241 HapModuleInfo *HapModuleInfo::Unmarshalling(Parcel &parcel)
242 {
243 HapModuleInfo *info = new (std::nothrow) HapModuleInfo();
244 if (info && !info->ReadFromParcel(parcel)) {
245 APP_LOGW("read from parcel failed");
246 delete info;
247 info = nullptr;
248 }
249 return info;
250 }
251
Marshalling(Parcel & parcel) const252 bool HapModuleInfo::Marshalling(Parcel &parcel) const
253 {
254 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(name));
255 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(package));
256 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(moduleName));
257 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(description));
258 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, descriptionId);
259 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(iconPath));
260 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, iconId);
261 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(label));
262 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, labelId);
263 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(backgroundImg));
264 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(mainAbility));
265 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(srcPath));
266 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(hashValue));
267 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(hapPath));
268 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, supportedModes);
269
270 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, reqCapabilities.size());
271 for (auto &reqCapability : reqCapabilities) {
272 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(reqCapability));
273 }
274
275 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, deviceTypes.size());
276 for (auto &deviceType : deviceTypes) {
277 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(deviceType));
278 }
279
280 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, dependencies.size());
281 for (auto &dependency : dependencies) {
282 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(dependency));
283 }
284
285 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, abilityInfos.size());
286 for (auto &abilityInfo : abilityInfos) {
287 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &abilityInfo);
288 }
289
290 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(colorMode));
291 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(bundleName));
292 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(mainElementName));
293 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(pages));
294 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(process));
295 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(resourcePath));
296 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(srcEntrance));
297 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uiSyntax));
298 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(virtualMachine));
299 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, deliveryWithInstall);
300 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, installationFree);
301 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isModuleJson);
302 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isStageBasedModel);
303
304 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, isRemovable.size());
305 for (auto &item : isRemovable) {
306 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(item.first));
307 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, item.second);
308 }
309
310 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(moduleType));
311
312 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, extensionInfos.size());
313 for (auto &extensionInfo : extensionInfos) {
314 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &extensionInfo);
315 }
316
317 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metadata.size());
318 for (auto &mete : metadata) {
319 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &mete);
320 }
321
322 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, upgradeFlag);
323 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(compileMode));
324 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &hqfInfo);
325 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isLibIsolated);
326 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(nativeLibraryPath));
327 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(cpuAbi));
328 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(moduleSourceDir));
329
330 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(atomicServiceModuleType));
331
332 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, preloads.size());
333 for (auto &item : preloads) {
334 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &item);
335 }
336 return true;
337 }
338
to_json(nlohmann::json & jsonObject,const HapModuleInfo & hapModuleInfo)339 void to_json(nlohmann::json &jsonObject, const HapModuleInfo &hapModuleInfo)
340 {
341 jsonObject = nlohmann::json {
342 {HAP_MODULE_INFO_NAME, hapModuleInfo.name},
343 {HAP_MODULE_INFO_PACKAGE, hapModuleInfo.package},
344 {Constants::MODULE_NAME, hapModuleInfo.moduleName},
345 {HAP_MODULE_INFO_DESCRIPTION, hapModuleInfo.description},
346 {HAP_MODULE_INFO_DESCRIPTION_ID, hapModuleInfo.descriptionId},
347 {HAP_MODULE_INFO_ICON_PATH, hapModuleInfo.iconPath},
348 {HAP_MODULE_INFO_ICON_ID, hapModuleInfo.iconId},
349 {HAP_MODULE_INFO_LABEL, hapModuleInfo.label},
350 {HAP_MODULE_INFO_LABEL_ID, hapModuleInfo.labelId},
351 {HAP_MODULE_INFO_BACKGROUND_IMG, hapModuleInfo.backgroundImg},
352 {HAP_MODULE_INFO_MAIN_ABILITY, hapModuleInfo.mainAbility},
353 {HAP_MODULE_INFO_SRC_PATH, hapModuleInfo.srcPath},
354 {HAP_MODULE_INFO_HASH_VALUE, hapModuleInfo.hashValue},
355 {HAP_MODULE_INFO_HAP_PATH, hapModuleInfo.hapPath},
356 {HAP_MODULE_INFO_SUPPORTED_MODES, hapModuleInfo.supportedModes},
357 {HAP_MODULE_INFO_REQ_CAPABILITIES, hapModuleInfo.reqCapabilities},
358 {HAP_MODULE_INFO_DEVICE_TYPES, hapModuleInfo.deviceTypes},
359 {HAP_MODULE_INFO_ABILITY_INFOS, hapModuleInfo.abilityInfos},
360 {HAP_MODULE_INFO_COLOR_MODE, hapModuleInfo.colorMode},
361 {Constants::BUNDLE_NAME, hapModuleInfo.bundleName},
362 {HAP_MODULE_INFO_MAIN_ELEMENTNAME, hapModuleInfo.mainElementName},
363 {HAP_MODULE_INFO_PAGES, hapModuleInfo.pages},
364 {HAP_MODULE_INFO_PROCESS, hapModuleInfo.process},
365 {HAP_MODULE_INFO_RESOURCE_PATH, hapModuleInfo.resourcePath},
366 {HAP_MODULE_INFO_SRC_ENTRANCE, hapModuleInfo.srcEntrance},
367 {HAP_MODULE_INFO_UI_SYNTAX, hapModuleInfo.uiSyntax},
368 {HAP_MODULE_INFO_VIRTUAL_MACHINE, hapModuleInfo.virtualMachine},
369 {HAP_MODULE_INFO_DELIVERY_WITH_INSTALL, hapModuleInfo.deliveryWithInstall},
370 {HAP_MODULE_INFO_INSTALLATION_FREE, hapModuleInfo.installationFree},
371 {HAP_MODULE_INFO_IS_MODULE_JSON, hapModuleInfo.isModuleJson},
372 {HAP_MODULE_INFO_IS_STAGE_BASED_MODEL, hapModuleInfo.isStageBasedModel},
373 {HAP_MODULE_INFO_IS_REMOVABLE, hapModuleInfo.isRemovable},
374 {HAP_MODULE_INFO_UPGRADE_FLAG, hapModuleInfo.upgradeFlag},
375 {HAP_MODULE_INFO_MODULE_TYPE, hapModuleInfo.moduleType},
376 {HAP_MODULE_INFO_EXTENSION_INFOS, hapModuleInfo.extensionInfos},
377 {HAP_MODULE_INFO_META_DATA, hapModuleInfo.metadata},
378 {HAP_MODULE_INFO_DEPENDENCIES, hapModuleInfo.dependencies},
379 {HAP_MODULE_INFO_COMPILE_MODE, hapModuleInfo.compileMode},
380 {HAP_MODULE_INFO_HQF_INFO, hapModuleInfo.hqfInfo},
381 {HAP_MODULE_INFO_IS_LIB_ISOLATED, hapModuleInfo.isLibIsolated},
382 {HAP_MODULE_INFO_NATIVE_LIBRARY_PATH, hapModuleInfo.nativeLibraryPath},
383 {HAP_MODULE_INFO_CPU_ABI, hapModuleInfo.cpuAbi},
384 {HAP_MODULE_INFO_MODULE_SOURCE_DIR, hapModuleInfo.moduleSourceDir},
385 {HAP_MODULE_INFO_ATOMIC_SERVICE_MODULE_TYPE, hapModuleInfo.atomicServiceModuleType},
386 {HAP_MODULE_INFO_PRELOADS, hapModuleInfo.preloads}
387 };
388 }
389
from_json(const nlohmann::json & jsonObject,HapModuleInfo & hapModuleInfo)390 void from_json(const nlohmann::json &jsonObject, HapModuleInfo &hapModuleInfo)
391 {
392 const auto &jsonObjectEnd = jsonObject.end();
393 int32_t parseResult = ERR_OK;
394 GetValueIfFindKey<std::string>(jsonObject,
395 jsonObjectEnd,
396 HAP_MODULE_INFO_NAME,
397 hapModuleInfo.name,
398 JsonType::STRING,
399 false,
400 parseResult,
401 ArrayType::NOT_ARRAY);
402 GetValueIfFindKey<std::string>(jsonObject,
403 jsonObjectEnd,
404 HAP_MODULE_INFO_PACKAGE,
405 hapModuleInfo.package,
406 JsonType::STRING,
407 false,
408 parseResult,
409 ArrayType::NOT_ARRAY);
410 GetValueIfFindKey<std::string>(jsonObject,
411 jsonObjectEnd,
412 Constants::MODULE_NAME,
413 hapModuleInfo.moduleName,
414 JsonType::STRING,
415 false,
416 parseResult,
417 ArrayType::NOT_ARRAY);
418 GetValueIfFindKey<std::string>(jsonObject,
419 jsonObjectEnd,
420 HAP_MODULE_INFO_DESCRIPTION,
421 hapModuleInfo.description,
422 JsonType::STRING,
423 false,
424 parseResult,
425 ArrayType::NOT_ARRAY);
426 GetValueIfFindKey<int>(jsonObject,
427 jsonObjectEnd,
428 HAP_MODULE_INFO_DESCRIPTION_ID,
429 hapModuleInfo.descriptionId,
430 JsonType::NUMBER,
431 false,
432 parseResult,
433 ArrayType::NOT_ARRAY);
434 GetValueIfFindKey<std::string>(jsonObject,
435 jsonObjectEnd,
436 HAP_MODULE_INFO_ICON_PATH,
437 hapModuleInfo.iconPath,
438 JsonType::STRING,
439 false,
440 parseResult,
441 ArrayType::NOT_ARRAY);
442 GetValueIfFindKey<int>(jsonObject,
443 jsonObjectEnd,
444 HAP_MODULE_INFO_ICON_ID,
445 hapModuleInfo.iconId,
446 JsonType::NUMBER,
447 false,
448 parseResult,
449 ArrayType::NOT_ARRAY);
450 GetValueIfFindKey<std::string>(jsonObject,
451 jsonObjectEnd,
452 HAP_MODULE_INFO_LABEL,
453 hapModuleInfo.label,
454 JsonType::STRING,
455 false,
456 parseResult,
457 ArrayType::NOT_ARRAY);
458 GetValueIfFindKey<int>(jsonObject,
459 jsonObjectEnd,
460 HAP_MODULE_INFO_LABEL_ID,
461 hapModuleInfo.labelId,
462 JsonType::NUMBER,
463 false,
464 parseResult,
465 ArrayType::NOT_ARRAY);
466 GetValueIfFindKey<std::string>(jsonObject,
467 jsonObjectEnd,
468 HAP_MODULE_INFO_BACKGROUND_IMG,
469 hapModuleInfo.backgroundImg,
470 JsonType::STRING,
471 false,
472 parseResult,
473 ArrayType::NOT_ARRAY);
474 GetValueIfFindKey<std::string>(jsonObject,
475 jsonObjectEnd,
476 HAP_MODULE_INFO_MAIN_ABILITY,
477 hapModuleInfo.mainAbility,
478 JsonType::STRING,
479 false,
480 parseResult,
481 ArrayType::NOT_ARRAY);
482 GetValueIfFindKey<std::string>(jsonObject,
483 jsonObjectEnd,
484 HAP_MODULE_INFO_SRC_PATH,
485 hapModuleInfo.srcPath,
486 JsonType::STRING,
487 false,
488 parseResult,
489 ArrayType::NOT_ARRAY);
490 GetValueIfFindKey<std::string>(jsonObject,
491 jsonObjectEnd,
492 HAP_MODULE_INFO_HASH_VALUE,
493 hapModuleInfo.hashValue,
494 JsonType::STRING,
495 false,
496 parseResult,
497 ArrayType::NOT_ARRAY);
498 GetValueIfFindKey<std::string>(jsonObject,
499 jsonObjectEnd,
500 HAP_MODULE_INFO_HAP_PATH,
501 hapModuleInfo.hapPath,
502 JsonType::STRING,
503 false,
504 parseResult,
505 ArrayType::NOT_ARRAY);
506 GetValueIfFindKey<int>(jsonObject,
507 jsonObjectEnd,
508 HAP_MODULE_INFO_SUPPORTED_MODES,
509 hapModuleInfo.supportedModes,
510 JsonType::NUMBER,
511 false,
512 parseResult,
513 ArrayType::NOT_ARRAY);
514 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
515 jsonObjectEnd,
516 HAP_MODULE_INFO_REQ_CAPABILITIES,
517 hapModuleInfo.reqCapabilities,
518 JsonType::ARRAY,
519 false,
520 parseResult,
521 ArrayType::STRING);
522 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
523 jsonObjectEnd,
524 HAP_MODULE_INFO_DEVICE_TYPES,
525 hapModuleInfo.deviceTypes,
526 JsonType::ARRAY,
527 false,
528 parseResult,
529 ArrayType::STRING);
530 GetValueIfFindKey<std::vector<AbilityInfo>>(jsonObject,
531 jsonObjectEnd,
532 HAP_MODULE_INFO_ABILITY_INFOS,
533 hapModuleInfo.abilityInfos,
534 JsonType::ARRAY,
535 false,
536 parseResult,
537 ArrayType::OBJECT);
538 GetValueIfFindKey<ModuleColorMode>(jsonObject,
539 jsonObjectEnd,
540 HAP_MODULE_INFO_COLOR_MODE,
541 hapModuleInfo.colorMode,
542 JsonType::NUMBER,
543 false,
544 parseResult,
545 ArrayType::NOT_ARRAY);
546 GetValueIfFindKey<std::string>(jsonObject,
547 jsonObjectEnd,
548 Constants::BUNDLE_NAME,
549 hapModuleInfo.bundleName,
550 JsonType::STRING,
551 false,
552 parseResult,
553 ArrayType::NOT_ARRAY);
554 GetValueIfFindKey<std::string>(jsonObject,
555 jsonObjectEnd,
556 HAP_MODULE_INFO_MAIN_ELEMENTNAME,
557 hapModuleInfo.mainElementName,
558 JsonType::STRING,
559 false,
560 parseResult,
561 ArrayType::NOT_ARRAY);
562 GetValueIfFindKey<std::string>(jsonObject,
563 jsonObjectEnd,
564 HAP_MODULE_INFO_PAGES,
565 hapModuleInfo.pages,
566 JsonType::STRING,
567 false,
568 parseResult,
569 ArrayType::NOT_ARRAY);
570 GetValueIfFindKey<std::string>(jsonObject,
571 jsonObjectEnd,
572 HAP_MODULE_INFO_PROCESS,
573 hapModuleInfo.process,
574 JsonType::STRING,
575 false,
576 parseResult,
577 ArrayType::NOT_ARRAY);
578 GetValueIfFindKey<std::string>(jsonObject,
579 jsonObjectEnd,
580 HAP_MODULE_INFO_RESOURCE_PATH,
581 hapModuleInfo.resourcePath,
582 JsonType::STRING,
583 false,
584 parseResult,
585 ArrayType::NOT_ARRAY);
586 GetValueIfFindKey<std::string>(jsonObject,
587 jsonObjectEnd,
588 HAP_MODULE_INFO_SRC_ENTRANCE,
589 hapModuleInfo.srcEntrance,
590 JsonType::STRING,
591 false,
592 parseResult,
593 ArrayType::NOT_ARRAY);
594 GetValueIfFindKey<std::string>(jsonObject,
595 jsonObjectEnd,
596 HAP_MODULE_INFO_UI_SYNTAX,
597 hapModuleInfo.uiSyntax,
598 JsonType::STRING,
599 false,
600 parseResult,
601 ArrayType::NOT_ARRAY);
602 GetValueIfFindKey<std::string>(jsonObject,
603 jsonObjectEnd,
604 HAP_MODULE_INFO_VIRTUAL_MACHINE,
605 hapModuleInfo.virtualMachine,
606 JsonType::STRING,
607 false,
608 parseResult,
609 ArrayType::NOT_ARRAY);
610 GetValueIfFindKey<bool>(jsonObject,
611 jsonObjectEnd,
612 HAP_MODULE_INFO_DELIVERY_WITH_INSTALL,
613 hapModuleInfo.deliveryWithInstall,
614 JsonType::BOOLEAN,
615 false,
616 parseResult,
617 ArrayType::NOT_ARRAY);
618 GetValueIfFindKey<bool>(jsonObject,
619 jsonObjectEnd,
620 HAP_MODULE_INFO_INSTALLATION_FREE,
621 hapModuleInfo.installationFree,
622 JsonType::BOOLEAN,
623 false,
624 parseResult,
625 ArrayType::NOT_ARRAY);
626 GetValueIfFindKey<bool>(jsonObject,
627 jsonObjectEnd,
628 HAP_MODULE_INFO_IS_MODULE_JSON,
629 hapModuleInfo.isModuleJson,
630 JsonType::BOOLEAN,
631 false,
632 parseResult,
633 ArrayType::NOT_ARRAY);
634 GetValueIfFindKey<bool>(jsonObject,
635 jsonObjectEnd,
636 HAP_MODULE_INFO_IS_STAGE_BASED_MODEL,
637 hapModuleInfo.isStageBasedModel,
638 JsonType::BOOLEAN,
639 false,
640 parseResult,
641 ArrayType::NOT_ARRAY);
642 GetValueIfFindKey<std::map<std::string, bool>>(jsonObject,
643 jsonObjectEnd,
644 HAP_MODULE_INFO_IS_REMOVABLE,
645 hapModuleInfo.isRemovable,
646 JsonType::OBJECT,
647 false,
648 parseResult,
649 ArrayType::NOT_ARRAY);
650 GetValueIfFindKey<int32_t>(jsonObject,
651 jsonObjectEnd,
652 HAP_MODULE_INFO_UPGRADE_FLAG,
653 hapModuleInfo.upgradeFlag,
654 JsonType::NUMBER,
655 false,
656 parseResult,
657 ArrayType::NOT_ARRAY);
658 GetValueIfFindKey<ModuleType>(jsonObject,
659 jsonObjectEnd,
660 HAP_MODULE_INFO_MODULE_TYPE,
661 hapModuleInfo.moduleType,
662 JsonType::NUMBER,
663 false,
664 parseResult,
665 ArrayType::NOT_ARRAY);
666 GetValueIfFindKey<std::vector<ExtensionAbilityInfo>>(jsonObject,
667 jsonObjectEnd,
668 HAP_MODULE_INFO_EXTENSION_INFOS,
669 hapModuleInfo.extensionInfos,
670 JsonType::ARRAY,
671 false,
672 parseResult,
673 ArrayType::OBJECT);
674 GetValueIfFindKey<std::vector<Metadata>>(jsonObject,
675 jsonObjectEnd,
676 HAP_MODULE_INFO_META_DATA,
677 hapModuleInfo.metadata,
678 JsonType::ARRAY,
679 false,
680 parseResult,
681 ArrayType::OBJECT);
682 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
683 jsonObjectEnd,
684 HAP_MODULE_INFO_DEPENDENCIES,
685 hapModuleInfo.dependencies,
686 JsonType::ARRAY,
687 false,
688 parseResult,
689 ArrayType::STRING);
690 GetValueIfFindKey<CompileMode>(jsonObject,
691 jsonObjectEnd,
692 HAP_MODULE_INFO_COMPILE_MODE,
693 hapModuleInfo.compileMode,
694 JsonType::NUMBER,
695 false,
696 parseResult,
697 ArrayType::NOT_ARRAY);
698 GetValueIfFindKey<HqfInfo>(jsonObject,
699 jsonObjectEnd,
700 HAP_MODULE_INFO_HQF_INFO,
701 hapModuleInfo.hqfInfo,
702 JsonType::OBJECT,
703 false,
704 parseResult,
705 ArrayType::NOT_ARRAY);
706 GetValueIfFindKey<bool>(jsonObject,
707 jsonObjectEnd,
708 HAP_MODULE_INFO_IS_LIB_ISOLATED,
709 hapModuleInfo.isLibIsolated,
710 JsonType::BOOLEAN,
711 false,
712 parseResult,
713 ArrayType::NOT_ARRAY);
714 GetValueIfFindKey<std::string>(jsonObject,
715 jsonObjectEnd,
716 HAP_MODULE_INFO_NATIVE_LIBRARY_PATH,
717 hapModuleInfo.nativeLibraryPath,
718 JsonType::STRING,
719 false,
720 parseResult,
721 ArrayType::NOT_ARRAY);
722 GetValueIfFindKey<std::string>(jsonObject,
723 jsonObjectEnd,
724 HAP_MODULE_INFO_CPU_ABI,
725 hapModuleInfo.cpuAbi,
726 JsonType::STRING,
727 false,
728 parseResult,
729 ArrayType::NOT_ARRAY);
730 GetValueIfFindKey<std::string>(jsonObject,
731 jsonObjectEnd,
732 HAP_MODULE_INFO_MODULE_SOURCE_DIR,
733 hapModuleInfo.moduleSourceDir,
734 JsonType::STRING,
735 false,
736 parseResult,
737 ArrayType::NOT_ARRAY);
738 GetValueIfFindKey<AtomicServiceModuleType>(jsonObject,
739 jsonObjectEnd,
740 HAP_MODULE_INFO_ATOMIC_SERVICE_MODULE_TYPE,
741 hapModuleInfo.atomicServiceModuleType,
742 JsonType::NUMBER,
743 false,
744 parseResult,
745 ArrayType::NOT_ARRAY);
746 GetValueIfFindKey<std::vector<PreloadItem>>(jsonObject,
747 jsonObjectEnd,
748 HAP_MODULE_INFO_PRELOADS,
749 hapModuleInfo.preloads,
750 JsonType::ARRAY,
751 false,
752 parseResult,
753 ArrayType::OBJECT);
754 if (parseResult != ERR_OK) {
755 APP_LOGW("HapModuleInfo from_json error, error code : %{public}d", parseResult);
756 }
757 }
758 } // namespace AppExecFwk
759 } // namespace OHOS
760