openharmony标准系统之app手动签名
今天在标准系统上使用DevEco Studio 3.0 Beta2开发app时,想直接在真机上运行,结果提示吐下信息,
App LaunchInstall Failed: [Info]App install path:D:\APP\HarmonyOS\Project\openHarmonyProject\standard\HelloWorld\entry\build\outputs\hap\debug\entry-debug-standard-ark-unsigned.hap, queuesize:0, msg:error: failed to install bundle. error: no signature file. AppMod finish
这种情况是因为没有给app进行签名导致的,现在按照官方文档进行签名操作,首先如下图,进入Build去生成证书请求文件。
进入如上图展示的选项后,然后选择如下图所示的选项。
然后出现如图所示界面,我们填写这个就可。
点击此箭头进入选择保存路径以及设置名字,如下图展示
进入后的界面如下图所示,选择正确的路径以及填写名字
然后点击OK就行,然后再在如下图所示界面填写密码,注意密码格式如下,
我这里用的是zxy122456
填写完成后点击OK完成创建,然后接着填写如下信息。
- Alias:密钥的别名信息,用于标识密钥名称。请记住该别名,后续签名配置需要使用。
- Password:密钥对应的密码,与密钥库密码保持一致,无需手动输入。
- Validity:证书有效期,建议设置为25年及以上,覆盖应用/服务的完整生命周期。
- Certificate:输入证书基本信息,如组织、城市或地区、国家码等。
然后点击箭头所指示的Next即可,然后会出现如下界面
这里需要设置我们的路径,点击箭头所指选项,
选择保存的路径,设置名字,然后点击OK。
回到上图所示界面后点击Finish即可,会提示如下图所示信息,点击ok即可。
创建成功如下所示多了几个文件。
接着需要生成证书文件,步骤如下,进入DevEco Studio安装目录的Sdk\toolchains\lib文件夹下(该SDK目录只能是OpenHarmony SDK),比如我这里是如下图路径,
将如上图所示文件全部拷贝到我们的key目录
然后找到如下图所示的路径,因为我们的keytool工具没有添加到系统环境变量,所以需要如此操作
打开此路径的cmd,然后执行如下命令
keytool -gencert -alias “OpenHarmony Application CA” -infile D:\APP\HarmonyOS\Project\openHarmonyProject\standard\HelloWorld\Key\HelloWorld.csr -outfile D:\APP\HarmonyOS\Project\openHarmonyProject\standard\HelloWorld\Key\HelloWorld.cer -keystore D:\APP\HarmonyOS\Project\openHarmonyProject\standard\HelloWorld\Key\OpenHarmony.p12 -sigAlg SHA384withECDSA -storepass 123456 -ext KeyUsage:“critical=digitalSignature” -validity 3650 -rfc - alias:用于签发证书的CA私钥别名,OpenHarmony社区CA私钥存于OpenHarmony.p12密钥库文件中,该参数不能修改。
- infile:证书请求(CSR)文件的路径。
- outfile:输出证书链文件名及路径。
- keystore:签发证书的CA密钥库路径,OpenHarmony密钥库文件名为OpenHarmony.p12,文件在OpenHarmony SDK中Sdk\toolchains\lib路径下,该参数不能修改。请注意,该OpenHarmony.p12文件并不是使用DevEco Studio生成证书请求文件中生成的.p12文件。
- sigAlg:证书签名算法,该参数不能修改。
- storepass:密钥库密码,密码为123456,该参数不能修改。
- ext:证书扩展项,该参数不能修改。
- validity:证书有效期,自定义天数。
- rfc:输出文件格式指定,该参数不能修改。
执行完成如下图。
生成如下图所示的文件就算成功。
然后再使用如下命令生成Profile文件
java -jar D:\APP\HarmonyOS\Project\openHarmonyProject\standard\HelloWorld\Key\provisionsigtool.jar sign --in D:\APP\HarmonyOS\Project\openHarmonyProject\standard\HelloWorld\Key\UnsgnedReleasedProfileTemplate.json --out D:\APP\HarmonyOS\Project\openHarmonyProject\standard\HelloWorld\Key\HelloWorld.p7b --keystore D:\APP\HarmonyOS\Project\openHarmonyProject\standard\HelloWorld\Key\OpenHarmony.p12 --storepass 123456 --alias “OpenHarmony Application Profile Release” --sigAlg SHA256withECDSA --cert D:\APP\HarmonyOS\Project\openHarmonyProject\standard\HelloWorld\Key\OpenHarmonyProfileRelease.pem --validity 365 --developer-id ohosdeveloper --bundle-name com.mc.helloworld --distribution-certificate D:\APP\HarmonyOS\Project\openHarmonyProject\standard\HelloWorld\Key\HelloWorld.cer
provisionsigtool:Profile文件生成工具,文件在OpenHarmony SDK的Sdk\toolchains\lib路径下。
in:Profile模板文件所在路径,文件在OpenHarmony SDK中Sdk\toolchains\lib路径下,该参数不能修改。
out:输出的Profile文件名和路径。
keystore:签发证书的密钥库路径,OpenHarmony密钥库文件名为OpenHarmony.p12,文件在OpenHarmony SDK中Sdk\toolchains\lib路径下,该参数不能修改。
storepass:密钥库密码,密码为123456,该参数不能修改。
alias:用于签名Profile私钥别名,OpenHarmony社区CA私钥存于OpenHarmony.p12密钥库文件中,该参数不能修改。
sigAlg:证书签名算法,该参数不能修改。
cert:签名Profile的证书文件路径,文件在OpenHarmony SDK中Sdk\toolchains\lib路径下,该参数不能修改。
validity:证书有效期,自定义天数。
developer-id:开发者标识符,自定义一个字符串。
bundle-name:填写应用包名。
permission:可选字段,如果不需要,则可以不用填写此字段;如果需要添加多个受限权限,则如示例所示重复输入。受限权限列表如下:ohos.permission.READ_CONTACTS、ohos.permission.WRITE_CONTACTS。
distribution-certificate:生成应用证书文件中生成的证书文件。
然后就是配置使用签名信息,首先进入如下所示选项
然后选择如下图所示选项
这里填写信息说明如下:
- Store File:选择密钥库文件,文件后缀为.p12,该文件为使用DevEco Studio生成证书请求文件中生成的.p12文件。
- Store Password:输入密钥库密码,该密码为使用DevEco Studio生成证书请求文件中填写的密钥库密码保持一致。我这里使用zxy1122456
- Key Alias:输入密钥的别名信息,与使用DevEco Studio生成证书请求文件中填写的别名保持一致。我这里是HelloWorld_debug
- Key Password:输入密钥的密码,与Store Password保持一致。zxy1122456
- Sign Alg:签名算法,固定为SHA256withECDSA。
- Profile File:选择生成应用Profile文件中生成的Profile文件,文件后缀为.p7b。
- Certpath File:选择生成证书文件中生成的数字证书文件,文件后缀为.cer。
- 然后点击右下角OK即可。