1e41f4b71Sopenharmony_ci#  HarmonyAppProvision配置文件说明
2e41f4b71Sopenharmony_ci在应用的开发过程中,应用的权限、签名信息等需要在HarmonyAppProvision配置文件(该文件在部分文档中也称为profile文件)中声明。
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ci## 配置文件的内部结构
5e41f4b71Sopenharmony_ciHarmonyAppProvision文件包含version-code对象、version-name对象、uuid对象、type对象、issuer对象、validity对象、bundle-info对象、acls对象、permissions对象、debug-info对象、app-privilege-capabilities对象等部分组成。
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci| 属性名称     | 含义                                                                                     | 数据类型 | 是否必选 | 是否可缺省 |
8e41f4b71Sopenharmony_ci| ----------- | ---------------------------------------------------------------------------------------- | -------- | -------- | -------- |
9e41f4b71Sopenharmony_ci| version-code | 表示HarmonyAppProvision文件格式的版本号,取值范围为二进制32位以内的正整数。 | 数值   | 必选 | 不可缺省                 |
10e41f4b71Sopenharmony_ci| version-name     | 表示版本号的文字描述,推荐使用三段数字版本号,如A.B.C。        | 字符串   | 必选 | 不可缺省 |
11e41f4b71Sopenharmony_ci| uuid    | 表示文件的唯一ID号,用于OEM厂商标识HarmonyAppProvision文件,开源社区版本该属性不做强制要求。                       | 字符串     | 必选 | 不可缺省 |
12e41f4b71Sopenharmony_ci| type | 表示HarmonyAppProvision文件的类型, 系统预定义的文件类型包括:debug(用于应用调试场景)和release(用于应用发布场景) ,开源社区版本该属性值建议为debug。 | 字符串     | 必选 | 不可缺省 |
13e41f4b71Sopenharmony_ci| app-distribution-type | 表示应用的分发类型,分发类型包括: <li>app_gallery:应用市场分发的应用。 <li> enterprise:企业应用,可以安装到个人设备上。<li> enterprise_mdm:企业MDM应用,只能安装在企业设备上。需要设备管理特权,比如远程锁定,安装普通企业应用等。 <li>enterprise_normal:普通企业应用,只能通过企业MDM应用安装在企业设备上。无需设备管理特权。<li>os_integration:系统预置应用。<li>crowdtesting:众包测试应用。<li>none:其他。 | 字符串 | 必选 | 不可缺省 |
14e41f4b71Sopenharmony_ci| issuer | 表示HarmonyAppProvision签发者。        | 字符串     | 必选 | 不可缺省 |
15e41f4b71Sopenharmony_ci| validity    | 表示HarmonyAppProvision文件有效期的信息。参考[validity对象内部结构](#validity对象内部结构)。  | 对象     | 必选 | 不可缺省  |
16e41f4b71Sopenharmony_ci| bundle-info | 表示应用包以及开发者的信息。参考[bundle-info对象内部结构](#bundle-info对象内部结构)。         | 对象     | 必选 | 不可缺省  |
17e41f4b71Sopenharmony_ci| acls        | 表示授权的acl权限信息。参考[acls对象内部结构](#acls对象内部结构)。                           | 对象     | 可选 | 可缺省    |
18e41f4b71Sopenharmony_ci| permissions | 表示允许使用的受限敏感权限信息。参考[permissions对象内部结构](#permissions对象内部结构)。      | 对象     | 可选 | 可缺省    |
19e41f4b71Sopenharmony_ci| debug-info  | 表示应用调试场景下的额外信息。参考[debug-info对象内部结构](#debug-info对象内部结构)。          | 对象     | 可选 | 可缺省         |
20e41f4b71Sopenharmony_ci| app-privilege-capabilities | 表示应用包所需要的特权信息。可以参考[应用特权配置指南](../../device-dev/subsystems/subsys-app-privilege-config-guide.md)。   | 字符串数组 | 可选 | 可缺省         |
21e41f4b71Sopenharmony_ci
22e41f4b71Sopenharmony_ciHarmonyAppProvision文件示例:
23e41f4b71Sopenharmony_ci```json
24e41f4b71Sopenharmony_ci{
25e41f4b71Sopenharmony_ci    "version-code": 1,
26e41f4b71Sopenharmony_ci    "version-name": "1.0.0",
27e41f4b71Sopenharmony_ci	"uuid": "string",
28e41f4b71Sopenharmony_ci	"type": "debug",
29e41f4b71Sopenharmony_ci	"app-distribution-type": "os_integration",
30e41f4b71Sopenharmony_ci	"validity": {
31e41f4b71Sopenharmony_ci		"not-before": 1586422743,
32e41f4b71Sopenharmony_ci		"not-after": 1617958743
33e41f4b71Sopenharmony_ci	},
34e41f4b71Sopenharmony_ci	"bundle-info" : {
35e41f4b71Sopenharmony_ci		"developer-id": "OpenHarmony",
36e41f4b71Sopenharmony_ci		"development-certificate": "Base64 string",
37e41f4b71Sopenharmony_ci		"distribution-certificate": "Base64 string",
38e41f4b71Sopenharmony_ci		"bundle-name": "com.OpenHarmony.app.test",
39e41f4b71Sopenharmony_ci		"apl": "normal",
40e41f4b71Sopenharmony_ci		"app-feature": "hos_normal_app",
41e41f4b71Sopenharmony_ci		"data-group-ids": [
42e41f4b71Sopenharmony_ci			"testGroupId1",
43e41f4b71Sopenharmony_ci			"testGroupId2"
44e41f4b71Sopenharmony_ci		]
45e41f4b71Sopenharmony_ci	},
46e41f4b71Sopenharmony_ci	"acls": {
47e41f4b71Sopenharmony_ci		"allowed-acls": ["string"]
48e41f4b71Sopenharmony_ci    },
49e41f4b71Sopenharmony_ci	"permissions": {
50e41f4b71Sopenharmony_ci		"restricted-permissions": ["string"]
51e41f4b71Sopenharmony_ci    },
52e41f4b71Sopenharmony_ci    "debug-info" : {
53e41f4b71Sopenharmony_ci	    "device-id-type": "udid",
54e41f4b71Sopenharmony_ci	    "device-ids": ["string"]
55e41f4b71Sopenharmony_ci    },
56e41f4b71Sopenharmony_ci    "app-privilege-capabilities":["AllowAppUsePrivilegeExtension"],
57e41f4b71Sopenharmony_ci    "issuer": "OpenHarmony"
58e41f4b71Sopenharmony_ci}
59e41f4b71Sopenharmony_ci
60e41f4b71Sopenharmony_ci```
61e41f4b71Sopenharmony_ci
62e41f4b71Sopenharmony_ci### validity对象内部结构
63e41f4b71Sopenharmony_ci
64e41f4b71Sopenharmony_ci| 属性名称    | 含义                            | 数据类型 | 是否必选 | 是否可缺省 |
65e41f4b71Sopenharmony_ci| ---------- | ------------------------------- | ------- | ------- | --------- |
66e41f4b71Sopenharmony_ci| not-before | 表示文件有效期的开始时间,时间表示方式为unix时间戳,非负整数。 | 数值    | 必选 | 不可缺省   |
67e41f4b71Sopenharmony_ci| not-after  | 表示文件有效期的结束时间,时间表示方式为unix时间戳,非负整数。 | 数值    | 必选 | 不可缺省   |
68e41f4b71Sopenharmony_ci
69e41f4b71Sopenharmony_ci### bundle-info对象内部结构
70e41f4b71Sopenharmony_ci
71e41f4b71Sopenharmony_ci**说明:** HarmonyAppProvision文件中的bundle-info对象中bundle-name需要和所签名应用的包名bundleName(config.json/module.json5)保持一致。为了防止同一个HarmonyAppProvision配置文件任意用于不同应用的签名,在应用安装过程中,系统会校验HAP签名信息的bundleName与HAP的配置文件中的bundleName是否一致,如果不一致,HAP无法安装。
72e41f4b71Sopenharmony_ci
73e41f4b71Sopenharmony_ci| 属性名称                  | 含义                            | 数据类型 | 是否必选 | 是否可缺省 |
74e41f4b71Sopenharmony_ci| ------------------------ | ------------------------------- | ------- | -------- | --------- |
75e41f4b71Sopenharmony_ci| developer-id | 表示开发者的唯一ID号,用于OEM厂商标识开发者,开源社区版本该属性不做强制要求。 | 字符串    | 必选 | 不可缺省   |
76e41f4b71Sopenharmony_ci| development-certificate  | 表示[调试证书](hapsigntool-guidelines.md)的信息。 | 数值    | 当type属性为debug时,该属性必选;否则,该属性可选。   | 不可缺省   |
77e41f4b71Sopenharmony_ci| distribution-certificate  | 表示[发布证书](hapsigntool-guidelines.md)的信息。 | 数值    | 当type属性为release时,该标签必选;否则,该标签可选。 | 不可缺省   |
78e41f4b71Sopenharmony_ci| bundle-name  | 表示应用程序的Bundle名称。 | 字符串    | 必选 | 不可缺省   |
79e41f4b71Sopenharmony_ci| apl  | 表示应用程序的[APL级别](AccessToken/access-token-overview.md),系统预定义的apl包括:normal、system_basic和system_core。 | 字符串    | 必选 | 不可缺省   |
80e41f4b71Sopenharmony_ci| app-feature  | 表示应用程序的类型,系统预定义的app-feature包括hos_system_app (系统应用)和hos_normal_app(普通应用)。只有系统应用才允许调用系统API,普通应用调用系统API可能会调用失败或运行异常。 | 字符串    | 必选 | 不可缺省   |
81e41f4b71Sopenharmony_ci| data-group-ids  | 表示应用程序的dataGroupId集合。在应用程序安装时,每一个dataGroupId都会生成一个目录。若两个应用的data-group-ids存在某个相交的dataGroupId,或者一个ExtensionAbility在其对应的[module.json5](../quick-start/module-configuration-file.md#extensionabilities标签)文件中声明的dataGroupIds和其所在应用的data-group-ids存在某个相交的dataGroupId,那么它们之间可以共享这个dataGroupId生成的共享数据目录。 | 字符串数组    | 可选 | 该标签可缺省,缺省值为空。   |
82e41f4b71Sopenharmony_ci| app-identifier | 应用的唯一标识,由云端统一分配。该ID在应用全生命周期中不会发生变化,包括版本升级、证书变更、开发者公私钥变更、应用转移等。 | 字符串数组    | 可选 | 该标签可缺省,缺省值为空。   |
83e41f4b71Sopenharmony_ci
84e41f4b71Sopenharmony_ci
85e41f4b71Sopenharmony_ci### acls对象内部结构
86e41f4b71Sopenharmony_ciacls对象包含已授权的[ACL权限](AccessToken/permissions-for-system-apps.md)。需要指出的是,开发者仍然需要在[应用包配置文件](../quick-start/module-configuration-file.md#requestpermissions标签)将acls权限信息填写到requestPermissions属性中。
87e41f4b71Sopenharmony_ci
88e41f4b71Sopenharmony_ci| 属性名称                  | 含义                            | 数据类型 | 是否必选 | 是否可缺省 |
89e41f4b71Sopenharmony_ci| ------------------------ | ------------------------------- | ------- | ------- | --------- |
90e41f4b71Sopenharmony_ci| allowed-acls | 表示已授权的[ACL权限](AccessToken/permissions-for-system-apps.md)列表。 | 字符串数组    | 可选 | 不可缺省   |
91e41f4b71Sopenharmony_ci
92e41f4b71Sopenharmony_ci### permissions对象内部结构
93e41f4b71Sopenharmony_cipermissions对象包含允许使用的受限敏感权限。不同于acls对象,permissions对象中的权限仅代表应用允许使用该敏感权限,权限最终由用户运行时授权。需要指出的是,开发者仍然需要在[应用包配置文件](../quick-start/module-configuration-file.md#requestpermissions标签)将permissions权限信息填写到requestPermissions属性中。
94e41f4b71Sopenharmony_ci
95e41f4b71Sopenharmony_ci| 属性名称                  | 含义                            | 数据类型 | 是否必选 | 是否可缺省 |
96e41f4b71Sopenharmony_ci| ------------------------ | ------------------------------- | ------- | ------- | --------- |
97e41f4b71Sopenharmony_ci| restricted-permissions | 表示允许使用的[受限敏感权限](AccessToken/permissions-for-all.md#user_grant用户授权权限列表)。 | 字符串数组    | 可选 | 不可缺省   |
98e41f4b71Sopenharmony_ci
99e41f4b71Sopenharmony_ci### debug-info对象内部结构
100e41f4b71Sopenharmony_cidebug-info对象包含应用调试场景下的信息,主要是设备管控的信息。
101e41f4b71Sopenharmony_ci
102e41f4b71Sopenharmony_ci| 属性名称                  | 含义                            | 数据类型 | 是否必选 | 是否可缺省 |
103e41f4b71Sopenharmony_ci| ------------------------ | ------------------------------- | ------- | ------- | --------- |
104e41f4b71Sopenharmony_ci| device-id-type | 表示设备ID的类型,当前系统仅提供udid的设备ID类型。 | 字符串    | 可选 | 不可缺省   |
105e41f4b71Sopenharmony_ci| device-ids | 表示应用调试场景下允许调试的设备ID列表。 | 字符串数组    | 可选 | 不可缺省   |
106e41f4b71Sopenharmony_ci
107e41f4b71Sopenharmony_ci## 修改HarmonyAppProvision配置文件
108e41f4b71Sopenharmony_ci
109e41f4b71Sopenharmony_ci当开发者新建一个工程时,应用的类型默认为hos_normal_app(普通应用),APL级别默认为normal。
110e41f4b71Sopenharmony_ci
111e41f4b71Sopenharmony_ci当需要使用系统API时,开发者需要手动修改app-feature字段为hos_system_app(系统应用);当需要申请高级别权限时,开发者可能需要修改apl、acl等字段,请根据实际需要,参考[访问控制开发概述](AccessToken/access-token-overview.md)进行修改。
112e41f4b71Sopenharmony_ci
113e41f4b71Sopenharmony_ci
114e41f4b71Sopenharmony_ci开发者可以参考以下步骤,修改HarmonyAppProvision配置文件。
115e41f4b71Sopenharmony_ci
116e41f4b71Sopenharmony_ci1. 打开OpenHarmony SDK所在目录(可通过DevEco Studio菜单栏中单击File > Settings > OpenHarmony SDK界面查看 )。
117e41f4b71Sopenharmony_ci2. 在SDK目录下,进入Toolchains > {Version} > lib文件夹,打开“UnsignedReleasedProfileTemplate.json”文件。
118e41f4b71Sopenharmony_ci3. 根据实际需求,修改对应的字段。
119e41f4b71Sopenharmony_ci
120e41f4b71Sopenharmony_ci完成配置文件修改后,开发者可以参考[Hap包签名工具使用指导](hapsigntool-overview.md)进行应用签名。
121e41f4b71Sopenharmony_ci
122e41f4b71Sopenharmony_ci<!--no_check-->