• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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