├── -issuerKeyAlias # 颁发者的密钥别名,可选项,如果不填,表示根CA
├── -issuerKeyPwd # 颁发者的密钥口令,可选项
├── -subject # 证书主题,必填项
├── -validity # 证书有效期,可选项,默认为3650天
├── -signAlg # 签名算法,必填项,包括SHA256withRSA / SHA384withRSA / SHA256withECDSA / SHA384withECDSA
├── -basicConstraintsPathLen # 路径长度,可选项,默认为0
├── -keystoreFile # 密钥库文件,必填项,JKS或P12格式
├── -keystorePwd # 密钥库口令,可选项
├── -issuerKeystoreFile # 签发者密钥库文件,可选项,JKS或P12格式
├── -issuerKeystorePwd # 签发者密钥库口令,可选项
├── -outFile # 输出文件,可选项,如果不填,则直接输出到控制台
6. 生成应用调试/发布证书。
generate-app-cert : 生成应用调试/发布证书
├── -keyAlias # 密钥别名,必填项
├── -keyPwd # 密钥口令,可选项
├── -issuer # 颁发者的主题,必填项
├── -issuerKeyAlias # 颁发者的密钥别名,必填项
├── -issuerKeyPwd # 颁发者的密钥口令,可选项
├── -subject # 证书主题,必填项
├── -validity # 证书有效期,可选项,默认为3650天
├── -signAlg # 签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA;
├── -issuerKeystoreFile # 签发者密钥库文件,可选项,JKS或P12格式
├── -issuerKeystorePwd # 签发者密钥库口令,可选项
├── -keystoreFile # 密钥库文件,必填项,JKS或P12格式
├── -keystorePwd # 密钥库口令,可选项
├── -outForm # 输出证书文件的格式,包括 cert / certChain,可选项,默认为certChain
├── -rootCaCertFile # outForm为certChain时必填,根CA证书文件
├── -subCaCertFile # outForm为certChain时必填,中间CA证书文件
├── -outFile # 输出证书文件(证书或证书链),可选项,如果不填,则直接输出到控制台
7. 生成profile调试/发布证书。
generate-profile-cert : 生成profile调试/发布证书
├── -keyAlias # 密钥别名,必填项
├── -keyPwd # 密钥口令,可选项
├── -issuer # 颁发者的主题,必填项
├── -issuerKeyAlias # 颁发者的密钥别名,必填项
├── -issuerKeyPwd # 颁发者的密钥口令,可选项
├── -subject # 证书主题,必填项
├── -validity # 证书有效期,可选项,默认为3650天
├── -signAlg # 签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA;
├── -issuerKeystoreFile # 签发者密钥库文件,可选项,JKS或P12格式
├── -issuerKeystorePwd # 签发者密钥库口令,可选项
├── -keystoreFile # 密钥库文件,必填项,JKS或P12格式
├── -keystorePwd # 密钥库口令,可选项
├── -outForm # 输出证书文件的格式,包括 cert / certChain,可选项,默认为certChain
├── -rootCaCertFile # outForm为certChain时必填,根CA证书文件
├── -subCaCertFile # outForm为certChain时必填,中间CA证书文件
├── -outFile # 输出证书文件(证书或证书链),可选项,如果不填,则直接输出到控制台
8. 通用证书生成,可以生成自定义证书。
generate-cert : 通用证书生成,可以生成自定义证书
├── -keyAlias # 密钥别名,必填项
├── -keyPwd # 密钥口令,可选项
├── -issuer # 颁发者的主题,必填项
├── -issuerKeyAlias # 颁发者的密钥别名,必填项
├── -issuerKeyPwd # 颁发者的密钥口令,可选项
├── -subject # 证书主题,必填项
├── -validity # 证书有效期,可选项,默认为1095天
├── -keyUsage # 密钥用法,必选项,包括digitalSignature, nonRepudiation, keyEncipherment,
├ dataEncipherment, keyAgreement, certificateSignature, crlSignature,
├ encipherOnly和decipherOnly,如果证书包括多个密钥用法,用逗号分隔
├── -keyUsageCritical # keyUsage是否为关键项,可选项,默认为是
├── -extKeyUsage # 扩展密钥用法,可选项,包括clientAuthentication,serverAuthentication,
├ codeSignature,emailProtection,smartCardLogin,timestamp,ocspSignature
├── -extKeyUsageCritical # extKeyUsage是否为关键项,可选项,默认为否
├── -signAlg # 签名算法,必填项,包括SHA256withRSA/SHA384withRSA/SHA256withECDSA/SHA384withECDSA
├── -basicConstraints # 是否包含basicConstraints,可选项,默认为否
├── -basicConstraintsCritical # basicConstraints是否包含为关键项,可选项,默认为否
├── -basicConstraintsCa # 是否为CA,可选项,默认为否
├── -basicConstraintsPathLen # 路径长度,可选项,默认为0
├── -issuerKeystoreFile # 签发者密钥库文件,可选项,JKS或P12格式
├── -issuerKeystorePwd # 签发者密钥库口令,可选项
├── -keystoreFile # 密钥库文件,必填项,JKS或P12格式
├── -keystorePwd # 密钥库口令,可选项
├── -outFile # 输出证书文件,可选项,如果不填,则直接输出到控制台
9. profile文件签名。
sign-profile : profile文件签名
├── -mode # 签名模式,必填项,包括localSign,remoteSign
├── -keyAlias # 密钥别名,必填项
├── -keyPwd # 密钥口令,可选项
├── -profileCertFile # Profile签名证书(证书链,顺序为最终实体证书-中间CA证书-根证书),必填项
├── -inFile # 输入原始的模板Profile文件,文件为json格式,所在目录为developtools_hapsigner/autosign/UnsgnedReleasedProfileTemplate.json,必填项
├── -signAlg # 签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA
├── -keystoreFile # 密钥库文件,localSign模式时为必填项,JKS或P12格式
├── -keystorePwd # 密钥库口令,可选项
├── -outFile # 输出签名后的profile文件,p7b格式,必填项
10. profile文件验签。
verify-profile : profile文件验签
├── -inFile # 已签名的profile文件,p7b格式,必填项
├── -outFil # 验证结果文件(包含验证结果和profile内容),json格式,可选项;如果不填,则直接输出到控制台
11. hap应用包签名。
sign-app : hap应用包签名
├── -mode # 签名模式,必填项,包括localSign,remoteSign,remoteResign
├── -keyAlias # 密钥别名,必填项
├──-keyPwd # 密钥口令,可选项
├── -appCertFile # 应用签名证书文件(证书链,顺序为最终实体证书-中间CA证书-根证书),必填项
├── -profileFile # 签名后的profile文件名,p7b格式,必填项
├── -profileSigned # 指示profile文件是否带有签名,1表示有签名,0表示没有签名,默认为1。可选项
├── -inForm # 输入的原始文件的格式,zip格式或bin格式,默认zip格式,可选项
├── -inFile # 输入的原始APP包文件,hap格式或bin格式,必填项
├── -signAlg # 签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA
├── -keystoreFile # 密钥库文件,localSign模式时为必填项,JKS或P12格式
├── -keystorePwd # 密钥库口令,可选项
├── -outFile # 输出签名后的包文件,必填项
12. hap应用包文件验签。
verify-app : hap应用包文件验签
├── -inFile # 已签名的应用包文件,hap格式或bin格式,必填项
├── -outCertchain # 签名的证书链文件,必填项
├── -outProfile # 应用包中的profile文件,必填项
#### 签名步骤
对hap包签名的完整步骤为:
* 生成应用签名证书密钥对
* 生成应用签名证书
* 对profile文件进行签名
* 对Hap包进行签名
>
> **注意事项:**
>
>
> 1. 步骤一中的密钥对算法推荐使用ECC,出于安全性考虑,应用签名暂不使用RSA算法。
> 2. 建议将待签名hap包、profile文件、密钥库文件OpenHarmony.p12、根CA证书、中间CA证书、签名工具放在同一个目录下,方便操作。在[**developtools\_hapsigner/autosign/result**]( )路径下,有如下文件:
> - OpenHarmony密钥库文件**OpenHarmony.p12**
> - 根CA证书**rootCA.cer**
> - 中间CA证书**subCA.cer**
> - profile签名证书**OpenHarmonyProfileRelease.pem**
>
>
>
1. **生成应用签名证书密钥对**
调用密钥对生成接口,生成签名密钥并保存到密钥库。
命令实例:
java -jar hap-sign-tool.jar generate-keypair -keyAlias "oh-app1-key-v1" -keyAlg "ECC" -keySize "NIST-P-256" -keystoreFile "OpenHarmony.p12" -keyPwd "123456" -keystorePwd "123456"
shell
>
> **说明:**
> 请记录下**keyAlias、keyStorePwd**和**keyPwd**的值,在后续生成应用 签名证书和对Hap包进行签名操作会使用到。
>
>
>
该命令的参数说明:
generate-keypair : 生成应用签名证书密钥对
├── -keyAlias #用于生成应用签名证书的密钥别名,存于OpenHarmony.p12密钥库文件中,该参数必填
├── -keyAlg #密钥算法,推荐使用ECC,该参数必填
├── -keySize #密钥长度,ECC算法的长度NIST-P-256/NIST-P-384,该参数必填
├── -keyStoreFile #密钥库文件,推荐使用提供的OpenHarmony.p12密钥库文件,该参数必填
├── -keyStorePwd #密钥库口令,OpenHarmony.p12口令默认为“123456”,必填项
├── -keyPwd #密钥口令,可选项,该参数不填默认生成的密钥对无口令
2. **生成应用签名证书**
调用应用签名证书生成接口,使用本地中间CA证书签发应用签名证书。
命令实例:
java -jar hap-sign-tool.jar generate-app-cert -keyAlias "oh-app1-key-v1" -signAlg "SHA256withECDSA" -issuer "C=CN,O=OpenHarmony,OU=OpenHarmony Team,CN= OpenHarmony Application CA" -issuerKeyAlias "openharmony application ca" -subject "C=CN,O=OpenHarmony,OU=OpenHarmony Team,CN=OpenHarmony Application Release" -keystoreFile "OpenHarmony.p12" -subCaCertFile "subCA.cer" -rootCaCertFile "rootCA.cer" -outForm "certChain" -outFile "app1.pem" -keyPwd "123456" -keystorePwd "123456" -issuerKeyPwd "123456" -validity "365"
该命令的参数说明:
generate-app-cert:生成应用签名证书
├── -keyAlias # 用于生成应用签名证书的密钥别名,请与第一步生成密钥对的密钥别名-keyAlias保持一致
├── -signAlg # 签名算法,必填项,包括 SHA256withECDSA / SHA384withECDSA
├── -issuer # 颁发者主题,填写已提供的中间CA证书主题,该参数必填且不能修改
├── -issuerKeyAlias # 颁发者密钥别名,填写中间CA证书密钥别名,该参数必填且不能修改
├── -subject # 证书主题,请参照命令实例中内容保证顺序不变,该参数必填
├── -issuerKeyPwd # 颁发者密钥口令,填写中间CA证书密钥口令,该参数必填,指定“123456”,不可修改
├── -keystoreFile # 密钥库文件,指定使用提供的OpenHarmony.p12密钥库文件,该参数必填且不可修改
├── -rootCaCertFile # 根CA证书文件,指定为已提供的根CA证书,该参数必填且不可修改
├── -subCaCertFile # 中间CA证书文件,指定为已提供的中间CA证书,该参数必填且不可修改
├── -outForm # 输出证书文件格式,推荐使用certChain
├── -outFile # 可选项,建议填写,不填则默认输出到控制台
├── -keyPwd # 密钥口令,可选项,为第一步生成的密钥对口令
├── -keystorePwd # 密钥库口令,默认为“123456”
├── -validity # 证书有效期,可选项,默认为3650天
3. **对profile文件进行签名**
调用profile文件签名接口,使用Profile签名密钥对profile文件进行签名。
命令实例:
java -jar hap-sign-tool.jar sign-profile -keyAlias "openharmony application profile release" -signAlg "SHA256withECDSA" -mode "localSign" -profileCertFile "OpenHarmonyProfileRelease.pem" -inFile "UnsgnedReleasedProfileTemplate.json" -keystoreFile "OpenHarmony.p12" -outFile "app1-profile.p7b" -keyPwd "123456" -keystorePwd "123456"
该命令的参数说明:
sign-profile:签名profile文件
├── -keyAlias # 生成profile证书的密钥别名,该参数必填且不能修改
├── -signAlg # 签名算法,包括 SHA256withECDSA / SHA384withECDSA,该参数必填
├── -mode # 签名模式,目前仅支持localSign,该参数必填
├── -profileCertFile # Profile签名证书,指定已提供的profile证书文件,该参数必填且不可修改
├── -inFile # 输入原始的模板Profile文件,文件为json格式,所在目录为developtools_hapsigner/autosign/UnsgnedReleasedProfileTemplate.json,该参数必填
├── -keystoreFile # 密钥库文件,指定使用提供的OpenHarmony.p12密钥库文件,该参数必填且不可修改
├── -outFile # 输出签名后的profile文件,p7b格式,该参数必填
├── -keyPwd # 密钥口令,OpenHarmony.p12中的口令默认“123456”
├── -keystorePwd # 密钥库口令,OpenHarmony.p12口令默认为“123456”
4. **对Hap包进行签名**
调用Hap包签名接口,使用应用签名密钥为Hap包签名。
命令实例:
java -jar hap-sign-tool.jar sign-app -keyAlias "oh-app1-key-v1" -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile "app1.pem" -profileFile "app1-profile.p7b" -inFile "app1-unsigned.zip" -keystoreFile "OpenHarmony.p12" -outFile "app1-signed.hap" -keyPwd "123456" -keystorePwd "123456"
>
> **说明**:
> 以下参数说明默认为无应用签名证书场景,当开发场景为有应用签名证书场景时,下列参数需要修改: -keyAlias:密钥别名,填写已有应用签名证书对应的密钥别名,参数必填。 -appCertFile:应用签名证书,填写已有的应用签名证书,参数必填。 -keystoreFile:密钥库文件,填写已有应用签名证书对应的密钥库文件,参数必填。 -keyPwd:密钥口令,填写密钥库文件中对应密钥的口令。 -keystorePwd:密钥库口令,填写密钥库文件的密钥口令。
>
>
>
该命令的参数说明:
sign-app:签名Hap包
├── -keyAlias # 密钥别名,为第一步生成的密钥信息别名,该参数必填
├── -signAlg # 签名算法,包括 SHA256withECDSA / SHA384withECDSA,该参数必填
├── -mode # 签名模式,目前仅支持localSign,该参数必填
├── -appCertFile # 应用签名证书(证书链,顺序为最终实体证书-中间CA证书-根证书),填写第二步生成的应用签名证书,该参数必填
├── -profileFile # 签名后的profile文件,p7b格式,填写第三步中生成的profile文件,必填项
├── -inFile # 输入原始APP包文件,该参数必填
├── -keystoreFile # 密钥库文件,请与步骤一中密钥库文件保持一致,该参数必填且不可修改
├── -outFile # 输出签名后的包文件,必填项
├── -keyPwd # 密钥口令,与第一步生成的密钥对口令保持一致
├── -keystorePwd # 密钥库口令,与第一步的密钥库口令保持一致
### 常见问题
1. 执行第二步生成应用签名证书命令时,控制台打印结果,无文件输出。
* **现象描述**
生成证书时,只在控制台打印证书内容,无对应文件输出。
* **可能原因**
outFile参数中路径不正确 和 ‘-outFile’中的’-'非英文格式。
* **解决办法**
检查并修正outFile参数为正确路径,‘-outFile’中的’-'为英文格式
2. 执行第三步对profile文件进行签名时,提示签名失败。
* **现象描述**
现象分为以下几种:
(1)执行命令后提示 `"SIGN_ERROR, code: 107. Details: Failed to verify signature: Wrong key usage"`
(2)执行命令后提示 `"NOT_SUPPORT_ERROR, code: 105. Details: Profile cert 'result\profile1.pem' must a cert chain"`
(3)执行命令后提示 `"VERIFY_ERROR, code: 108. Details: Failed to verify signature: unable to find valid certification path to requested target"`
* **可能原因**
(1)profile签名证书(最终实体证书)证书链顺序不正确。
(2)profile签名证书(最终实体证书)不是证书链。
(3)证书主题顺序不正确 或者 生成应用签名证书时“-issuerKeyAlias”参数填写错误。
* **解决办法**
(1)检查并修正证书链顺序,只能正序或反序,不可乱序。
(2)检查签名时的最终实体证书是否为证书链。
(3)检查证书主题顺序是否正确,顺序须为C、O、OU、CN。
3. 对Hap包进行签名时提示签名错误。
* **现象描述**
执行命令后提示:`NOT_SUPPORT_ERROR, code: 105. Details: SignAlg params is incorrect, signature algorithms include SHA256withECDSA,SHA384withECDSA`。
* **可能原因**
签名算法不支持,signAlg参数填写错误。
* **解决办法**
最终实体证书密钥对推荐使用ECC生成,hap签名算法修改为ECC对应的SHA256withECDSA,SHA384withECDSA。
### 配置文件的内部结构
HarmonyAppProvision文件包含version-code对象、version-name对象、uuid对象、type对象、issuer对象、validity对象、bundle-info对象、acls对象、permissions对象、debug-info对象、app-privilege-capabilities对象等部分组成。
| 属性名称 | 含义 | 数据类型 | 是否必选 | 是否可缺省 |
| --- | --- | --- | --- | --- |
| version-code | 表示HarmonyAppProvision文件格式的版本号,取值范围为二进制32位以内的正整数。 | 数值 | 必选 | 不可缺省 |
| version-name | 表示版本号的文字描述,推荐使用三段数字版本号,如A.B.C。 | 字符串 | 必选 | 不可缺省 |
| uuid | 表示文件的唯一ID号,用于OEM厂商标识HarmonyAppProvision文件,开源社区版本该属性不做强制要求。 | 字符串 | 必选 | 不可缺省 |
| type | 表示HarmonyAppProvision文件的类型, 系统预定义的文件类型包括:debug(用于应用调试场景)和release(用于应用发布场景) ,开源社区版本该属性值建议为debug。 | 字符串 | 必选 | 不可缺省 |
| issuer | 表示HarmonyAppProvision签发者。 | 字符串 | 必选 | 不可缺省 |
| validity | 表示HarmonyAppProvision文件有效期的信息。参考[validity对象内部结构](#validity%E5%AF%B9%E8%B1%A1%E5%86%85%E9%83%A8%E7%BB%93%E6%9E%84)。 | 对象 | 必选 | 不可缺省 |
| bundle-info | 表示应用包以及开发者的信息。参考[bundle-info对象内部结构](#bundle-info%E5%AF%B9%E8%B1%A1%E5%86%85%E9%83%A8%E7%BB%93%E6%9E%84)。 | 对象 | 必选 | 不可缺省 |
| acls | 表示授权的acl权限信息。参考[acls对象内部结构](#acls%E5%AF%B9%E8%B1%A1%E5%86%85%E9%83%A8%E7%BB%93%E6%9E%84)。 | 对象 | 可选 | 可缺省 |
| permissions | 表示允许使用的受限敏感权限信息。参考[permissions对象内部结构](#permissions%E5%AF%B9%E8%B1%A1%E5%86%85%E9%83%A8%E7%BB%93%E6%9E%84)。 | 对象 | 可选 | 可缺省 |
| debug-info | 表示应用调试场景下的额外信息。参考[debug-info对象内部结构](#debug-info%E5%AF%B9%E8%B1%A1%E5%86%85%E9%83%A8%E7%BB%93%E6%9E%84)。 | 对象 | 可选 | 可缺省 |
| app-privilege-capabilities | 表示应用包所需要的特权信息。可以参考[应用特权配置指南](/pages/v4.0/zh-cn/device-dev/subsystems/subsys-app-privilege-config-guide.md/)。 | 字符串数组 | 可选 | 可缺省 |
HarmonyAppProvision文件示例:
{
“version-code”: 1,
“version-name”: “1.0.0”,
“uuid”: “string”,
“type”: “debug”,
“validity”: {
“not-before”: 1586422743,
“not-after”: 1617958743
},
“bundle-info” : {
“developer-id”: “OpenHarmony”,
“development-certificate”: “Base64 string”,
“distribution-certificate”: “Base64 string”,
“bundle-name”: “com.OpenHarmony.app.test”,
“apl”: “normal”,
“app-feature”: “hos_normal_app”
},
“acls”: {
“allowed-acls”: [“string”]
},
“permissions”: {
“restricted-permissions”: [“string”]
},
“debug-info” : {
“device-id-type”: “udid”,
“device-ids”: [“string”]
},
“app-privilege-capabilities”:[“AllowAppUsePrivilegeExtension”],
“issuer”: “OpenHarmony”
}
#### validity对象内部结构
| 属性名称 | 含义 | 数据类型 | 是否必选 | 是否可缺省 |
| --- | --- | --- | --- | --- |
| not-before | 表示文件有效期的开始时间,时间表示方式为unix时间戳,非负整数。 | 数值 | 必选 | 不可缺省 |
| not-after | 表示文件有效期的结束时间,时间表示方式为unix时间戳,非负整数。 | 数值 | 必选 | 不可缺省 |
#### bundle-info对象内部结构
**说明:** HarmonyAppProvision文件中的bundle-info对象中bundle-name需要和所签名应用的包名bundleName(config.json/module.json5)保持一致。为了防止同一个HarmonyAppProvision配置文件任意用于不同应用的签名,在应用安装过程中,系统会校验HAP签名信息的bundleName与HAP的配置文件中的bundleName是否一致,如果不一致,HAP无法安装。
| 属性名称 | 含义 | 数据类型 | 是否必选 | 是否可缺省 |
| --- | --- | --- | --- | --- |
| developer-id | 表示开发者的唯一ID号,用于OEM厂商标识开发者,开源社区版本该属性不做强制要求。 | 字符串 | 必选 | 不可缺省 |
| development-certificate | 表示[调试证书](/pages/v4.0/zh-cn/application-dev/security/hapsigntool-guidelines.md/)的信息。 | 数值 | 当type属性为debug时,该属性必选;否则,该属性可选。 | 不可缺省 |
| distribution-certificate | 表示[发布证书](/pages/v4.0/zh-cn/application-dev/security/hapsigntool-guidelines.md/)的信息。 | 数值 | 当type属性为release时,该标签必选;否则,该标签可选。 | 不可缺省 |
| bundle-name | 表示应用程序的Bundle名称。 | 字符串 | 必选 | 不可缺省 |
| apl | 表示应用程序的[APL级别](/pages/v4.0/zh-cn/application-dev/security/accesstoken-overview.md/),系统预定义的apl包括:normal、system\_basic和system\_core。 | 字符串 | 必选 | 不可缺省 |
| app-feature | 表示应用程序的类型,系统预定义的app-feature包括hos\_system\_app (系统应用)和hos\_normal\_app(普通应用)。只有系统应用才允许调用系统API,普通应用调用系统API可能会调用失败或运行异常。 | 字符串 | 必选 | 不可缺省 |
#### acls对象内部结构
acls对象包含已授权的[ACL权限](/pages/v4.0/zh-cn/application-dev/security/accesstoken-overview.md/)。需要指出的是,开发者仍然需要在[应用包配置文件](/pages/v4.0/zh-cn/application-dev/quick-start/module-configuration-file.md/#requestpermissions%E6%A0%87%E7%AD%BE)将acls权限信息填写到requestPermissions属性中。
| 属性名称 | 含义 | 数据类型 | 是否必选 | 是否可缺省 |
| --- | --- | --- | --- | --- |
| allowed-acls | 表示已授权的[acl权限](/pages/v4.0/zh-cn/application-dev/security/accesstoken-overview.md/)列表。 | 字符串数组 | 可选 | 不可缺省 |
#### permissions对象内部结构
permissions对象包含允许使用的受限敏感权限。不同于acls对象,permissions对象中的权限仅代表应用允许使用该敏感权限,权限最终由用户运行时授权。需要指出的是,开发者仍然需要在[应用包配置文件](/pages/v4.0/zh-cn/application-dev/quick-start/module-configuration-file.md/#requestpermissions%E6%A0%87%E7%AD%BE)将permissions权限信息填写到requestPermissions属性中。
| 属性名称 | 含义 | 数据类型 | 是否必选 | 是否可缺省 |
| --- | --- | --- | --- | --- |
| restricted-permissions | 表示允许使用的[受限敏感权限](/pages/v4.0/zh-cn/application-dev/security/accesstoken-overview.md/)。 | 字符串数组 | 可选 | 不可缺省 |
#### debug-info对象内部结构
debug-info对象包含应用调试场景下的信息,主要是设备管控的信息。
| 属性名称 | 含义 | 数据类型 | 是否必选 | 是否可缺省 |
| --- | --- | --- | --- | --- |
| device-id-type | 表示设备ID的类型,当前系统仅提供udid的设备ID类型。 | 字符串 | 可选 | 不可缺省 |
| device-ids | 表示应用调试场景下允许调试的设备ID列表。 | 字符串数组 | 可选 | 不可缺省 |
### 修改HarmonyAppProvision配置文件
当开发者新建一个工程时,应用的类型默认为hos\_normal\_app(普通应用),APL级别默认为normal。
当需要使用系统API时,开发者需要手动修改app-feature字段为hos\_system\_app(系统应用);当需要申请高级别权限时,开发者可能需要修改apl、acl等字段,请根据实际需要,参考[访问控制开发概述](/pages/v4.0/zh-cn/application-dev/security/accesstoken-overview.md/)进行修改。
开发者可以参考以下步骤,修改HarmonyAppProvision配置文件。
1. 打开OpenHarmony SDK所在目录(可通过DevEco Studio菜单栏中单击File > Settings > OpenHarmony SDK界面查看)。
2. 在SDK目录下,进入Toolchains > {Version} > lib文件夹,打开“UnsgnedReleasedProfileTemplate.json”文件。
3. 根据实际需求,修改对应的字段。
完成配置文件修改后,开发者可以参考[Hap包签名工具使用指导](/pages/v4.0/zh-cn/application-dev/security/hapsigntool-overview.md/)进行应用签名。
**为了能让大家更好的学习鸿蒙 (OpenHarmony) 开发技术,这边特意整理了《鸿蒙 (OpenHarmony)开发学习手册》(共计890页),希望对大家有所帮助:[`https://qr21.cn/FV7h05`]( )**
### 《鸿蒙 (OpenHarmony)开发学习手册》
#### 入门必看:[`https://qr21.cn/FV7h05`]( )
1. 应用开发导读(ArkTS)
2. ……
![](https://img-blog.csdnimg.cn/img_convert/ae33e4156e4c0f4f2ee9a4ada37a5b81.webp?x-oss-process=image/format,png)
### HarmonyOS 概念:[`https://qr21.cn/FV7h05`]( )
1. 系统定义
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/970e8df5a33ea89736b1f80fe44c9c14.png)
![img](https://img-blog.csdnimg.cn/img_convert/17cc05257fac8cc3362732bdce8b9f90.png)
![img](https://img-blog.csdnimg.cn/img_convert/8e96da99c7405163c22c50065dac5705.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新**
**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)**
![img](https://img-blog.csdnimg.cn/img_convert/5b058e293935b3f45ea7439452b372e7.png)
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中...(img-B47bnozD-1712854945835)]
[外链图片转存中...(img-3BgdOEID-1712854945835)]
[外链图片转存中...(img-PTLxCNsD-1712854945836)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新**
**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)**
[外链图片转存中...(img-LaBi4Xkd-1712854945836)]
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**