1 /*
2  * Copyright (c) 2023-2024 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 "ability_info.h"
17 
18 #include <errno.h>
19 #include <fcntl.h>
20 #include <string.h>
21 #include <unistd.h>
22 
23 #include "bundle_constants.h"
24 #include "hilog_tag_wrapper.h"
25 #include "json_util.h"
26 #include "nlohmann/json.hpp"
27 #include "string_ex.h"
28 
29 namespace OHOS {
30 namespace AppExecFwk {
31 namespace {
32 const std::string JSON_KEY_PACKAGE = "package";
33 const std::string JSON_KEY_NAME = "name";
34 const std::string JSON_KEY_APPLICATION_NAME = "applicationName";
35 const std::string JSON_KEY_LABEL = "label";
36 const std::string JSON_KEY_DESCRIPTION = "description";
37 const std::string JSON_KEY_ICON_PATH = "iconPath";
38 const std::string JSON_KEY_THEME = "theme";
39 const std::string JSON_KEY_VISIBLE = "visible";
40 const std::string JSON_KEY_KIND = "kind";
41 const std::string JSON_KEY_TYPE = "type";
42 const std::string JSON_KEY_EXTENSION_ABILITY_TYPE = "extensionAbilityType";
43 const std::string JSON_KEY_ORIENTATION = "orientation";
44 const std::string JSON_KEY_LAUNCH_MODE = "launchMode";
45 const std::string JSON_KEY_CODE_PATH = "codePath";
46 const std::string JSON_KEY_RESOURCE_PATH = "resourcePath";
47 const std::string JSON_KEY_PERMISSIONS = "permissions";
48 const std::string JSON_KEY_PROCESS = "process";
49 const std::string JSON_KEY_DEVICE_TYPES = "deviceTypes";
50 const std::string JSON_KEY_DEVICE_CAPABILITIES = "deviceCapabilities";
51 const std::string JSON_KEY_URI = "uri";
52 const std::string JSON_KEY_IS_LAUNCHER_ABILITY = "isLauncherAbility";
53 const std::string JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE = "removeMissionAfterTerminate";
54 const std::string JSON_KEY_IS_NATIVE_ABILITY = "isNativeAbility";
55 const std::string JSON_KEY_ENABLED = "enabled";
56 const std::string JSON_KEY_SUPPORT_PIP_MODE = "supportPipMode";
57 const std::string JSON_KEY_TARGET_ABILITY = "targetAbility";
58 const std::string JSON_KEY_READ_PERMISSION = "readPermission";
59 const std::string JSON_KEY_WRITE_PERMISSION = "writePermission";
60 const std::string JSON_KEY_CONFIG_CHANGES = "configChanges";
61 const std::string JSON_KEY_FORM = "form";
62 const std::string JSON_KEY_FORM_ENTITY = "formEntity";
63 const std::string JSON_KEY_MIN_FORM_HEIGHT = "minFormHeight";
64 const std::string JSON_KEY_DEFAULT_FORM_HEIGHT = "defaultFormHeight";
65 const std::string JSON_KEY_MIN_FORM_WIDTH = "minFormWidth";
66 const std::string JSON_KEY_DEFAULT_FORM_WIDTH = "defaultFormWidth";
67 const std::string JSON_KEY_BACKGROUND_MODES = "backgroundModes";
68 const std::string JSON_KEY_CUSTOMIZE_DATA = "customizeData";
69 const std::string JSON_KEY_META_DATA = "metaData";
70 const std::string JSON_KEY_META_VALUE = "value";
71 const std::string JSON_KEY_META_EXTRA = "extra";
72 const std::string JSON_KEY_LABEL_ID = "labelId";
73 const std::string JSON_KEY_DESCRIPTION_ID = "descriptionId";
74 const std::string JSON_KEY_ICON_ID = "iconId";
75 const std::string JSON_KEY_FORM_ENABLED = "formEnabled";
76 const std::string JSON_KEY_SRC_PATH = "srcPath";
77 const std::string JSON_KEY_SRC_LANGUAGE = "srcLanguage";
78 const std::string JSON_KEY_START_WINDOW_ICON = "startWindowIcon";
79 const std::string JSON_KEY_START_WINDOW_ICON_ID = "startWindowIconId";
80 const std::string JSON_KEY_START_WINDOW_BACKGROUND = "startWindowBackground";
81 const std::string JSON_KEY_START_WINDOW_BACKGROUND_ID = "startWindowBackgroundId";
82 const std::string JSON_KEY_COMPILE_MODE = "compileMode";
83 const std::string META_DATA = "metadata";
84 const std::string META_DATA_NAME = "name";
85 const std::string META_DATA_VALUE = "value";
86 const std::string META_DATA_RESOURCE = "resource";
87 const std::string SRC_ENTRANCE = "srcEntrance";
88 const std::string IS_MODULE_JSON = "isModuleJson";
89 const std::string IS_STAGE_BASED_MODEL = "isStageBasedModel";
90 const std::string CONTINUABLE = "continuable";
91 const std::string PRIORITY = "priority";
92 const std::string JOSN_KEY_SUPPORT_WINDOW_MODE = "supportWindowMode";
93 const std::string JOSN_KEY_MAX_WINDOW_RATIO = "maxWindowRatio";
94 const std::string JOSN_KEY_MIN_WINDOW_RATIO = "minWindowRatio";
95 const std::string JOSN_KEY_MAX_WINDOW_WIDTH = "maxWindowWidth";
96 const std::string JOSN_KEY_MIN_WINDOW_WIDTH = "minWindowWidth";
97 const std::string JOSN_KEY_MAX_WINDOW_HEIGHT = "maxWindowHeight";
98 const std::string JOSN_KEY_MIN_WINDOW_HEIGHT = "minWindowHeight";
99 const std::string JOSN_KEY_UID = "uid";
100 const std::string JOSN_KEY_EXCLUDE_FROM_MISSIONS = "excludeFromMissions";
101 const std::string JOSN_KEY_UNCLEARABLE_MISSION = "unclearableMission";
102 const std::string JSON_KEY_RECOVERABLE = "recoverable";
103 const std::string JSON_KEY_SUPPORT_EXT_NAMES = "supportExtNames";
104 const std::string JSON_KEY_SUPPORT_MIME_TYPES = "supportMimeTypes";
105 } // namespace
to_json(nlohmann::json & jsonObject,const CustomizeData & customizeData)106 void to_json(nlohmann::json &jsonObject, const CustomizeData &customizeData)
107 {
108     jsonObject = nlohmann::json {
109         {JSON_KEY_NAME, customizeData.name},
110         {JSON_KEY_META_VALUE, customizeData.value},
111         {JSON_KEY_META_EXTRA, customizeData.extra}
112     };
113 }
114 
to_json(nlohmann::json & jsonObject,const MetaData & metaData)115 void to_json(nlohmann::json &jsonObject, const MetaData &metaData)
116 {
117     jsonObject = nlohmann::json {
118         {JSON_KEY_CUSTOMIZE_DATA, metaData.customizeData}
119     };
120 }
121 
to_json(nlohmann::json & jsonObject,const Metadata & metadata)122 void to_json(nlohmann::json &jsonObject, const Metadata &metadata)
123 {
124     jsonObject = nlohmann::json {
125         {META_DATA_NAME, metadata.name},
126         {META_DATA_VALUE, metadata.value},
127         {META_DATA_RESOURCE, metadata.resource}
128     };
129 }
130 
to_json(nlohmann::json & jsonObject,const AbilityInfo & abilityInfo)131 void to_json(nlohmann::json &jsonObject, const AbilityInfo &abilityInfo)
132 {
133     TAG_LOGD(AAFwkTag::ABILITY_SIM, "called");
134     jsonObject = nlohmann::json {
135         {JSON_KEY_NAME, abilityInfo.name},
136         {JSON_KEY_LABEL, abilityInfo.label},
137         {JSON_KEY_DESCRIPTION, abilityInfo.description},
138         {JSON_KEY_ICON_PATH, abilityInfo.iconPath},
139         {JSON_KEY_LABEL_ID, abilityInfo.labelId},
140         {JSON_KEY_DESCRIPTION_ID, abilityInfo.descriptionId},
141         {JSON_KEY_ICON_ID, abilityInfo.iconId},
142         {JSON_KEY_THEME, abilityInfo.theme},
143         {JSON_KEY_VISIBLE, abilityInfo.visible},
144         {JSON_KEY_KIND, abilityInfo.kind},
145         {JSON_KEY_TYPE, abilityInfo.type},
146         {JSON_KEY_EXTENSION_ABILITY_TYPE, abilityInfo.extensionAbilityType},
147         {JSON_KEY_ORIENTATION, abilityInfo.orientation},
148         {JSON_KEY_LAUNCH_MODE, abilityInfo.launchMode},
149         {JSON_KEY_SRC_PATH, abilityInfo.srcPath},
150         {JSON_KEY_SRC_LANGUAGE, abilityInfo.srcLanguage},
151         {JSON_KEY_PERMISSIONS, abilityInfo.permissions},
152         {JSON_KEY_PROCESS, abilityInfo.process},
153         {JSON_KEY_DEVICE_TYPES, abilityInfo.deviceTypes},
154         {JSON_KEY_DEVICE_CAPABILITIES, abilityInfo.deviceCapabilities},
155         {JSON_KEY_URI, abilityInfo.uri},
156         {JSON_KEY_TARGET_ABILITY, abilityInfo.targetAbility},
157         {JSON_KEY_IS_LAUNCHER_ABILITY, abilityInfo.isLauncherAbility},
158         {JSON_KEY_IS_NATIVE_ABILITY, abilityInfo.isNativeAbility},
159         {JSON_KEY_ENABLED, abilityInfo.enabled},
160         {JSON_KEY_SUPPORT_PIP_MODE, abilityInfo.supportPipMode},
161         {JSON_KEY_FORM_ENABLED, abilityInfo.formEnabled},
162         {JSON_KEY_READ_PERMISSION, abilityInfo.readPermission},
163         {JSON_KEY_WRITE_PERMISSION, abilityInfo.writePermission},
164         {JSON_KEY_CONFIG_CHANGES, abilityInfo.configChanges},
165         {JSON_KEY_FORM_ENTITY, abilityInfo.formEntity},
166         {JSON_KEY_MIN_FORM_HEIGHT, abilityInfo.minFormHeight},
167         {JSON_KEY_DEFAULT_FORM_HEIGHT, abilityInfo.defaultFormHeight},
168         {JSON_KEY_MIN_FORM_WIDTH, abilityInfo.minFormWidth},
169         {JSON_KEY_DEFAULT_FORM_WIDTH, abilityInfo.defaultFormWidth},
170         {JSON_KEY_META_DATA, abilityInfo.metaData},
171         {JSON_KEY_BACKGROUND_MODES, abilityInfo.backgroundModes},
172         {JSON_KEY_PACKAGE, abilityInfo.package},
173         {Constants::BUNDLE_NAME, abilityInfo.bundleName},
174         {Constants::MODULE_NAME, abilityInfo.moduleName},
175         {JSON_KEY_APPLICATION_NAME, abilityInfo.applicationName},
176         {JSON_KEY_CODE_PATH, abilityInfo.codePath},
177         {JSON_KEY_RESOURCE_PATH, abilityInfo.resourcePath},
178         {Constants::HAP_PATH, abilityInfo.hapPath},
179         {SRC_ENTRANCE, abilityInfo.srcEntrance},
180         {META_DATA, abilityInfo.metadata},
181         {IS_MODULE_JSON, abilityInfo.isModuleJson},
182         {IS_STAGE_BASED_MODEL, abilityInfo.isStageBasedModel},
183         {CONTINUABLE, abilityInfo.continuable},
184         {PRIORITY, abilityInfo.priority},
185         {JSON_KEY_START_WINDOW_ICON, abilityInfo.startWindowIcon},
186         {JSON_KEY_START_WINDOW_ICON_ID, abilityInfo.startWindowIconId},
187         {JSON_KEY_START_WINDOW_BACKGROUND, abilityInfo.startWindowBackground},
188         {JSON_KEY_START_WINDOW_BACKGROUND_ID, abilityInfo.startWindowBackgroundId},
189         {JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE, abilityInfo.removeMissionAfterTerminate},
190         {JSON_KEY_COMPILE_MODE, abilityInfo.compileMode},
191         {JOSN_KEY_SUPPORT_WINDOW_MODE, abilityInfo.windowModes},
192         {JOSN_KEY_MAX_WINDOW_WIDTH, abilityInfo.maxWindowWidth},
193         {JOSN_KEY_MIN_WINDOW_WIDTH, abilityInfo.minWindowWidth},
194         {JOSN_KEY_MAX_WINDOW_HEIGHT, abilityInfo.maxWindowHeight},
195         {JOSN_KEY_MIN_WINDOW_HEIGHT, abilityInfo.minWindowHeight},
196         {JOSN_KEY_UID, abilityInfo.uid},
197         {JOSN_KEY_EXCLUDE_FROM_MISSIONS, abilityInfo.excludeFromMissions},
198         {JOSN_KEY_UNCLEARABLE_MISSION, abilityInfo.unclearableMission},
199         {JSON_KEY_RECOVERABLE, abilityInfo.recoverable},
200         {JSON_KEY_SUPPORT_EXT_NAMES, abilityInfo.supportExtNames},
201         {JSON_KEY_SUPPORT_MIME_TYPES, abilityInfo.supportMimeTypes},
202     };
203     if (abilityInfo.maxWindowRatio == 0) {
204         // maxWindowRatio in json string will be 0 instead of 0.0
205         jsonObject[JOSN_KEY_MAX_WINDOW_RATIO] = 0;
206     } else {
207         jsonObject[JOSN_KEY_MAX_WINDOW_RATIO] = abilityInfo.maxWindowRatio;
208     }
209 
210     if (abilityInfo.minWindowRatio == 0) {
211         jsonObject[JOSN_KEY_MIN_WINDOW_RATIO] = 0;
212     } else {
213         jsonObject[JOSN_KEY_MIN_WINDOW_RATIO] = abilityInfo.minWindowRatio;
214     }
215 }
216 
from_json(const nlohmann::json & jsonObject,CustomizeData & customizeData)217 void from_json(const nlohmann::json &jsonObject, CustomizeData &customizeData)
218 {
219     const auto &jsonObjectEnd = jsonObject.end();
220     int32_t parseResult = ERR_OK;
221     GetValueIfFindKey<std::string>(jsonObject,
222         jsonObjectEnd,
223         JSON_KEY_NAME,
224         customizeData.name,
225         JsonType::STRING,
226         false,
227         parseResult,
228         ArrayType::NOT_ARRAY);
229     GetValueIfFindKey<std::string>(jsonObject,
230         jsonObjectEnd,
231         JSON_KEY_META_VALUE,
232         customizeData.value,
233         JsonType::STRING,
234         false,
235         parseResult,
236         ArrayType::NOT_ARRAY);
237     GetValueIfFindKey<std::string>(jsonObject,
238         jsonObjectEnd,
239         JSON_KEY_META_EXTRA,
240         customizeData.extra,
241         JsonType::STRING,
242         false,
243         parseResult,
244         ArrayType::NOT_ARRAY);
245 }
246 
from_json(const nlohmann::json & jsonObject,MetaData & metaData)247 void from_json(const nlohmann::json &jsonObject, MetaData &metaData)
248 {
249     const auto &jsonObjectEnd = jsonObject.end();
250     int32_t parseResult = ERR_OK;
251     GetValueIfFindKey<std::vector<CustomizeData>>(jsonObject,
252         jsonObjectEnd,
253         JSON_KEY_CUSTOMIZE_DATA,
254         metaData.customizeData,
255         JsonType::ARRAY,
256         false,
257         parseResult,
258         ArrayType::OBJECT);
259 }
260 
from_json(const nlohmann::json & jsonObject,Metadata & metadata)261 void from_json(const nlohmann::json &jsonObject, Metadata &metadata)
262 {
263     const auto &jsonObjectEnd = jsonObject.end();
264     int32_t parseResult = ERR_OK;
265     GetValueIfFindKey<std::string>(jsonObject,
266         jsonObjectEnd,
267         META_DATA_NAME,
268         metadata.name,
269         JsonType::STRING,
270         false,
271         parseResult,
272         ArrayType::NOT_ARRAY);
273     GetValueIfFindKey<std::string>(jsonObject,
274         jsonObjectEnd,
275         META_DATA_VALUE,
276         metadata.value,
277         JsonType::STRING,
278         false,
279         parseResult,
280         ArrayType::NOT_ARRAY);
281     GetValueIfFindKey<std::string>(jsonObject,
282         jsonObjectEnd,
283         META_DATA_RESOURCE,
284         metadata.resource,
285         JsonType::STRING,
286         false,
287         parseResult,
288         ArrayType::NOT_ARRAY);
289     if (parseResult != ERR_OK) {
290         TAG_LOGD(
291             AAFwkTag::ABILITY_SIM, "read Ability Metadata error:%{public}d", parseResult);
292     }
293 }
294 
from_json(const nlohmann::json & jsonObject,AbilityInfo & abilityInfo)295 void from_json(const nlohmann::json &jsonObject, AbilityInfo &abilityInfo)
296 {
297     TAG_LOGD(AAFwkTag::ABILITY_SIM, "called");
298     const auto &jsonObjectEnd = jsonObject.end();
299     int32_t parseResult = ERR_OK;
300     GetValueIfFindKey<std::string>(jsonObject,
301         jsonObjectEnd,
302         JSON_KEY_NAME,
303         abilityInfo.name,
304         JsonType::STRING,
305         false,
306         parseResult,
307         ArrayType::NOT_ARRAY);
308     GetValueIfFindKey<std::string>(jsonObject,
309         jsonObjectEnd,
310         JSON_KEY_LABEL,
311         abilityInfo.label,
312         JsonType::STRING,
313         false,
314         parseResult,
315         ArrayType::NOT_ARRAY);
316     GetValueIfFindKey<std::string>(jsonObject,
317         jsonObjectEnd,
318         JSON_KEY_DESCRIPTION,
319         abilityInfo.description,
320         JsonType::STRING,
321         false,
322         parseResult,
323         ArrayType::NOT_ARRAY);
324     GetValueIfFindKey<std::string>(jsonObject,
325         jsonObjectEnd,
326         JSON_KEY_ICON_PATH,
327         abilityInfo.iconPath,
328         JsonType::STRING,
329         false,
330         parseResult,
331         ArrayType::NOT_ARRAY);
332     GetValueIfFindKey<int32_t>(jsonObject,
333         jsonObjectEnd,
334         JSON_KEY_LABEL_ID,
335         abilityInfo.labelId,
336         JsonType::NUMBER,
337         false,
338         parseResult,
339         ArrayType::NOT_ARRAY);
340     GetValueIfFindKey<int32_t>(jsonObject,
341         jsonObjectEnd,
342         JSON_KEY_DESCRIPTION_ID,
343         abilityInfo.descriptionId,
344         JsonType::NUMBER,
345         false,
346         parseResult,
347         ArrayType::NOT_ARRAY);
348     GetValueIfFindKey<int32_t>(jsonObject,
349         jsonObjectEnd,
350         JSON_KEY_ICON_ID,
351         abilityInfo.iconId,
352         JsonType::NUMBER,
353         false,
354         parseResult,
355         ArrayType::NOT_ARRAY);
356     GetValueIfFindKey<std::string>(jsonObject,
357         jsonObjectEnd,
358         JSON_KEY_THEME,
359         abilityInfo.theme,
360         JsonType::STRING,
361         false,
362         parseResult,
363         ArrayType::NOT_ARRAY);
364     GetValueIfFindKey<bool>(jsonObject,
365         jsonObjectEnd,
366         JSON_KEY_VISIBLE,
367         abilityInfo.visible,
368         JsonType::BOOLEAN,
369         false,
370         parseResult,
371         ArrayType::NOT_ARRAY);
372     GetValueIfFindKey<std::string>(jsonObject,
373         jsonObjectEnd,
374         JSON_KEY_KIND,
375         abilityInfo.kind,
376         JsonType::STRING,
377         false,
378         parseResult,
379         ArrayType::NOT_ARRAY);
380     GetValueIfFindKey<AbilityType>(jsonObject,
381         jsonObjectEnd,
382         JSON_KEY_TYPE,
383         abilityInfo.type,
384         JsonType::NUMBER,
385         false,
386         parseResult,
387         ArrayType::NOT_ARRAY);
388     GetValueIfFindKey<ExtensionAbilityType>(jsonObject,
389         jsonObjectEnd,
390         JSON_KEY_EXTENSION_ABILITY_TYPE,
391         abilityInfo.extensionAbilityType,
392         JsonType::NUMBER,
393         false,
394         parseResult,
395         ArrayType::NOT_ARRAY);
396     GetValueIfFindKey<DisplayOrientation>(jsonObject,
397         jsonObjectEnd,
398         JSON_KEY_ORIENTATION,
399         abilityInfo.orientation,
400         JsonType::NUMBER,
401         false,
402         parseResult,
403         ArrayType::NOT_ARRAY);
404     GetValueIfFindKey<LaunchMode>(jsonObject,
405         jsonObjectEnd,
406         JSON_KEY_LAUNCH_MODE,
407         abilityInfo.launchMode,
408         JsonType::NUMBER,
409         false,
410         parseResult,
411         ArrayType::NOT_ARRAY);
412     GetValueIfFindKey<std::string>(jsonObject,
413         jsonObjectEnd,
414         JSON_KEY_SRC_PATH,
415         abilityInfo.srcPath,
416         JsonType::STRING,
417         false,
418         parseResult,
419         ArrayType::NOT_ARRAY);
420     GetValueIfFindKey<std::string>(jsonObject,
421         jsonObjectEnd,
422         JSON_KEY_SRC_LANGUAGE,
423         abilityInfo.srcLanguage,
424         JsonType::STRING,
425         false,
426         parseResult,
427         ArrayType::NOT_ARRAY);
428     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
429         jsonObjectEnd,
430         JSON_KEY_PERMISSIONS,
431         abilityInfo.permissions,
432         JsonType::ARRAY,
433         false,
434         parseResult,
435         ArrayType::STRING);
436     GetValueIfFindKey<std::string>(jsonObject,
437         jsonObjectEnd,
438         JSON_KEY_PROCESS,
439         abilityInfo.process,
440         JsonType::STRING,
441         false,
442         parseResult,
443         ArrayType::NOT_ARRAY);
444     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
445         jsonObjectEnd,
446         JSON_KEY_DEVICE_TYPES,
447         abilityInfo.deviceTypes,
448         JsonType::ARRAY,
449         false,
450         parseResult,
451         ArrayType::STRING);
452     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
453         jsonObjectEnd,
454         JSON_KEY_DEVICE_CAPABILITIES,
455         abilityInfo.deviceCapabilities,
456         JsonType::ARRAY,
457         false,
458         parseResult,
459         ArrayType::STRING);
460     GetValueIfFindKey<std::string>(jsonObject,
461         jsonObjectEnd,
462         JSON_KEY_URI,
463         abilityInfo.uri,
464         JsonType::STRING,
465         false,
466         parseResult,
467         ArrayType::NOT_ARRAY);
468     GetValueIfFindKey<std::string>(jsonObject,
469         jsonObjectEnd,
470         JSON_KEY_TARGET_ABILITY,
471         abilityInfo.targetAbility,
472         JsonType::STRING,
473         false,
474         parseResult,
475         ArrayType::NOT_ARRAY);
476     GetValueIfFindKey<bool>(jsonObject,
477         jsonObjectEnd,
478         JSON_KEY_IS_LAUNCHER_ABILITY,
479         abilityInfo.isLauncherAbility,
480         JsonType::BOOLEAN,
481         false,
482         parseResult,
483         ArrayType::NOT_ARRAY);
484     GetValueIfFindKey<bool>(jsonObject,
485         jsonObjectEnd,
486         JSON_KEY_IS_NATIVE_ABILITY,
487         abilityInfo.isNativeAbility,
488         JsonType::BOOLEAN,
489         false,
490         parseResult,
491         ArrayType::NOT_ARRAY);
492     GetValueIfFindKey<bool>(jsonObject,
493         jsonObjectEnd,
494         JSON_KEY_ENABLED,
495         abilityInfo.enabled,
496         JsonType::BOOLEAN,
497         false,
498         parseResult,
499         ArrayType::NOT_ARRAY);
500     GetValueIfFindKey<bool>(jsonObject,
501         jsonObjectEnd,
502         JSON_KEY_SUPPORT_PIP_MODE,
503         abilityInfo.supportPipMode,
504         JsonType::BOOLEAN,
505         false,
506         parseResult,
507         ArrayType::NOT_ARRAY);
508     GetValueIfFindKey<bool>(jsonObject,
509         jsonObjectEnd,
510         JSON_KEY_FORM_ENABLED,
511         abilityInfo.formEnabled,
512         JsonType::BOOLEAN,
513         false,
514         parseResult,
515         ArrayType::NOT_ARRAY);
516     GetValueIfFindKey<std::string>(jsonObject,
517         jsonObjectEnd,
518         JSON_KEY_READ_PERMISSION,
519         abilityInfo.readPermission,
520         JsonType::STRING,
521         false,
522         parseResult,
523         ArrayType::NOT_ARRAY);
524     GetValueIfFindKey<std::string>(jsonObject,
525         jsonObjectEnd,
526         JSON_KEY_WRITE_PERMISSION,
527         abilityInfo.writePermission,
528         JsonType::STRING,
529         false,
530         parseResult,
531         ArrayType::NOT_ARRAY);
532     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
533         jsonObjectEnd,
534         JSON_KEY_CONFIG_CHANGES,
535         abilityInfo.configChanges,
536         JsonType::ARRAY,
537         false,
538         parseResult,
539         ArrayType::STRING);
540     GetValueIfFindKey<uint32_t>(jsonObject,
541         jsonObjectEnd,
542         JSON_KEY_FORM_ENTITY,
543         abilityInfo.formEntity,
544         JsonType::NUMBER,
545         false,
546         parseResult,
547         ArrayType::NOT_ARRAY);
548     GetValueIfFindKey<int32_t>(jsonObject,
549         jsonObjectEnd,
550         JSON_KEY_MIN_FORM_HEIGHT,
551         abilityInfo.minFormHeight,
552         JsonType::NUMBER,
553         false,
554         parseResult,
555         ArrayType::NOT_ARRAY);
556     GetValueIfFindKey<int32_t>(jsonObject,
557         jsonObjectEnd,
558         JSON_KEY_DEFAULT_FORM_HEIGHT,
559         abilityInfo.defaultFormHeight,
560         JsonType::NUMBER,
561         false,
562         parseResult,
563         ArrayType::NOT_ARRAY);
564     GetValueIfFindKey<int32_t>(jsonObject,
565         jsonObjectEnd,
566         JSON_KEY_MIN_FORM_WIDTH,
567         abilityInfo.minFormWidth,
568         JsonType::NUMBER,
569         false,
570         parseResult,
571         ArrayType::NOT_ARRAY);
572     GetValueIfFindKey<int32_t>(jsonObject,
573         jsonObjectEnd,
574         JSON_KEY_DEFAULT_FORM_WIDTH,
575         abilityInfo.defaultFormWidth,
576         JsonType::NUMBER,
577         false,
578         parseResult,
579         ArrayType::NOT_ARRAY);
580     GetValueIfFindKey<MetaData>(jsonObject,
581         jsonObjectEnd,
582         JSON_KEY_META_DATA,
583         abilityInfo.metaData,
584         JsonType::OBJECT,
585         false,
586         parseResult,
587         ArrayType::NOT_ARRAY);
588     GetValueIfFindKey<uint32_t>(jsonObject,
589         jsonObjectEnd,
590         JSON_KEY_BACKGROUND_MODES,
591         abilityInfo.backgroundModes,
592         JsonType::NUMBER,
593         false,
594         parseResult,
595         ArrayType::NOT_ARRAY);
596     GetValueIfFindKey<std::string>(jsonObject,
597         jsonObjectEnd,
598         JSON_KEY_PACKAGE,
599         abilityInfo.package,
600         JsonType::STRING,
601         false,
602         parseResult,
603         ArrayType::NOT_ARRAY);
604     GetValueIfFindKey<std::string>(jsonObject,
605         jsonObjectEnd,
606         Constants::BUNDLE_NAME,
607         abilityInfo.bundleName,
608         JsonType::STRING,
609         false,
610         parseResult,
611         ArrayType::NOT_ARRAY);
612     GetValueIfFindKey<std::string>(jsonObject,
613         jsonObjectEnd,
614         Constants::MODULE_NAME,
615         abilityInfo.moduleName,
616         JsonType::STRING,
617         false,
618         parseResult,
619         ArrayType::NOT_ARRAY);
620     GetValueIfFindKey<std::string>(jsonObject,
621         jsonObjectEnd,
622         JSON_KEY_APPLICATION_NAME,
623         abilityInfo.applicationName,
624         JsonType::STRING,
625         false,
626         parseResult,
627         ArrayType::NOT_ARRAY);
628     GetValueIfFindKey<std::string>(jsonObject,
629         jsonObjectEnd,
630         JSON_KEY_CODE_PATH,
631         abilityInfo.codePath,
632         JsonType::STRING,
633         false,
634         parseResult,
635         ArrayType::NOT_ARRAY);
636     GetValueIfFindKey<std::string>(jsonObject,
637         jsonObjectEnd,
638         JSON_KEY_RESOURCE_PATH,
639         abilityInfo.resourcePath,
640         JsonType::STRING,
641         false,
642         parseResult,
643         ArrayType::NOT_ARRAY);
644     GetValueIfFindKey<std::string>(jsonObject,
645         jsonObjectEnd,
646         Constants::HAP_PATH,
647         abilityInfo.hapPath,
648         JsonType::STRING,
649         false,
650         parseResult,
651         ArrayType::NOT_ARRAY);
652     GetValueIfFindKey<std::string>(jsonObject,
653         jsonObjectEnd,
654         SRC_ENTRANCE,
655         abilityInfo.srcEntrance,
656         JsonType::STRING,
657         false,
658         parseResult,
659         ArrayType::NOT_ARRAY);
660     GetValueIfFindKey<std::vector<Metadata>>(jsonObject,
661         jsonObjectEnd,
662         META_DATA,
663         abilityInfo.metadata,
664         JsonType::ARRAY,
665         false,
666         parseResult,
667         ArrayType::OBJECT);
668     GetValueIfFindKey<bool>(jsonObject,
669         jsonObjectEnd,
670         IS_MODULE_JSON,
671         abilityInfo.isModuleJson,
672         JsonType::BOOLEAN,
673         false,
674         parseResult,
675         ArrayType::NOT_ARRAY);
676     GetValueIfFindKey<bool>(jsonObject,
677         jsonObjectEnd,
678         IS_STAGE_BASED_MODEL,
679         abilityInfo.isStageBasedModel,
680         JsonType::BOOLEAN,
681         false,
682         parseResult,
683         ArrayType::NOT_ARRAY);
684     GetValueIfFindKey<bool>(jsonObject,
685         jsonObjectEnd,
686         CONTINUABLE,
687         abilityInfo.continuable,
688         JsonType::BOOLEAN,
689         false,
690         parseResult,
691         ArrayType::NOT_ARRAY);
692     GetValueIfFindKey<int32_t>(jsonObject,
693         jsonObjectEnd,
694         PRIORITY,
695         abilityInfo.priority,
696         JsonType::NUMBER,
697         false,
698         parseResult,
699         ArrayType::NOT_ARRAY);
700     GetValueIfFindKey<std::string>(jsonObject,
701         jsonObjectEnd,
702         JSON_KEY_START_WINDOW_ICON,
703         abilityInfo.startWindowIcon,
704         JsonType::STRING,
705         false,
706         parseResult,
707         ArrayType::NOT_ARRAY);
708     GetValueIfFindKey<int32_t>(jsonObject,
709         jsonObjectEnd,
710         JSON_KEY_START_WINDOW_ICON_ID,
711         abilityInfo.startWindowIconId,
712         JsonType::NUMBER,
713         false,
714         parseResult,
715         ArrayType::NOT_ARRAY);
716     GetValueIfFindKey<std::string>(jsonObject,
717         jsonObjectEnd,
718         JSON_KEY_START_WINDOW_BACKGROUND,
719         abilityInfo.startWindowBackground,
720         JsonType::STRING,
721         false,
722         parseResult,
723         ArrayType::NOT_ARRAY);
724     GetValueIfFindKey<int32_t>(jsonObject,
725         jsonObjectEnd,
726         JSON_KEY_START_WINDOW_BACKGROUND_ID,
727         abilityInfo.startWindowBackgroundId,
728         JsonType::NUMBER,
729         false,
730         parseResult,
731         ArrayType::NOT_ARRAY);
732     GetValueIfFindKey<bool>(jsonObject,
733         jsonObjectEnd,
734         JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE,
735         abilityInfo.removeMissionAfterTerminate,
736         JsonType::BOOLEAN,
737         false,
738         parseResult,
739         ArrayType::NOT_ARRAY);
740     GetValueIfFindKey<CompileMode>(jsonObject,
741         jsonObjectEnd,
742         JSON_KEY_COMPILE_MODE,
743         abilityInfo.compileMode,
744         JsonType::NUMBER,
745         false,
746         parseResult,
747         ArrayType::NOT_ARRAY);
748     GetValueIfFindKey<std::vector<SupportWindowMode>>(jsonObject,
749         jsonObjectEnd,
750         JOSN_KEY_SUPPORT_WINDOW_MODE,
751         abilityInfo.windowModes,
752         JsonType::ARRAY,
753         false,
754         parseResult,
755         ArrayType::NUMBER);
756     GetValueIfFindKey<double>(jsonObject,
757         jsonObjectEnd,
758         JOSN_KEY_MAX_WINDOW_RATIO,
759         abilityInfo.maxWindowRatio,
760         JsonType::NUMBER,
761         false,
762         parseResult,
763         ArrayType::NOT_ARRAY);
764     GetValueIfFindKey<double>(jsonObject,
765         jsonObjectEnd,
766         JOSN_KEY_MIN_WINDOW_RATIO,
767         abilityInfo.minWindowRatio,
768         JsonType::NUMBER,
769         false,
770         parseResult,
771         ArrayType::NOT_ARRAY);
772     GetValueIfFindKey<uint32_t>(jsonObject,
773         jsonObjectEnd,
774         JOSN_KEY_MAX_WINDOW_WIDTH,
775         abilityInfo.maxWindowWidth,
776         JsonType::NUMBER,
777         false,
778         parseResult,
779         ArrayType::NOT_ARRAY);
780     GetValueIfFindKey<uint32_t>(jsonObject,
781         jsonObjectEnd,
782         JOSN_KEY_MIN_WINDOW_WIDTH,
783         abilityInfo.minWindowWidth,
784         JsonType::NUMBER,
785         false,
786         parseResult,
787         ArrayType::NOT_ARRAY);
788     GetValueIfFindKey<uint32_t>(jsonObject,
789         jsonObjectEnd,
790         JOSN_KEY_MAX_WINDOW_HEIGHT,
791         abilityInfo.maxWindowHeight,
792         JsonType::NUMBER,
793         false,
794         parseResult,
795         ArrayType::NOT_ARRAY);
796     GetValueIfFindKey<uint32_t>(jsonObject,
797         jsonObjectEnd,
798         JOSN_KEY_MIN_WINDOW_HEIGHT,
799         abilityInfo.minWindowHeight,
800         JsonType::NUMBER,
801         false,
802         parseResult,
803         ArrayType::NOT_ARRAY);
804     GetValueIfFindKey<int32_t>(jsonObject,
805         jsonObjectEnd,
806         JOSN_KEY_UID,
807         abilityInfo.uid,
808         JsonType::NUMBER,
809         false,
810         parseResult,
811         ArrayType::NOT_ARRAY);
812     GetValueIfFindKey<bool>(jsonObject,
813         jsonObjectEnd,
814         JOSN_KEY_EXCLUDE_FROM_MISSIONS,
815         abilityInfo.excludeFromMissions,
816         JsonType::BOOLEAN,
817         false,
818         parseResult,
819         ArrayType::NOT_ARRAY);
820     GetValueIfFindKey<bool>(jsonObject,
821         jsonObjectEnd,
822         JOSN_KEY_UNCLEARABLE_MISSION,
823         abilityInfo.unclearableMission,
824         JsonType::BOOLEAN,
825         false,
826         parseResult,
827         ArrayType::NOT_ARRAY);
828     GetValueIfFindKey<bool>(jsonObject,
829         jsonObjectEnd,
830         JSON_KEY_RECOVERABLE,
831         abilityInfo.recoverable,
832         JsonType::BOOLEAN,
833         false,
834         parseResult,
835         ArrayType::NOT_ARRAY);
836     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
837         jsonObjectEnd,
838         JSON_KEY_SUPPORT_EXT_NAMES,
839         abilityInfo.supportExtNames,
840         JsonType::ARRAY,
841         false,
842         parseResult,
843         ArrayType::STRING);
844     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
845         jsonObjectEnd,
846         JSON_KEY_SUPPORT_MIME_TYPES,
847         abilityInfo.supportMimeTypes,
848         JsonType::ARRAY,
849         false,
850         parseResult,
851         ArrayType::STRING);
852     if (parseResult != ERR_OK) {
853         TAG_LOGE(AAFwkTag::ABILITY_SIM, "AbilityInfo from_json error:%{public}d", parseResult);
854     }
855 }
856 }  // namespace AppExecFwk
857 }  // namespace OHOS
858