HarmonyOS鸿蒙Next中通过命令行获取profile文件中的bundleName信息失败怎么办

HarmonyOS鸿蒙Next中通过命令行获取profile文件中的bundleName信息失败怎么办

【问题现象】

搭建流水线时通过cat命令行查看获取profile文件中的信息为乱码,没办法校验bundleName(包名)。

点击放大

【背景知识】

1. 为什么要校验profile中的包名

签名可能会因为签名所需要的profile文件与工程中的包名不同、当前不在profile有效期内等原因导致签名失败,提前校验可以尽早发现问题,符合测试左移的工程原则。

点击放大

此校验过程在搭建流水过程中下图的红框部分,构建后签名前的校验脚本中。

点击放大

2. 签名的作用

  • 应用身份识别:每个包文件都有一个唯一的签名,系统通过它来识别应用的身份。
  • 保证应用完整性:签名能够确保包文件在传输和安装过程中没有被篡改。如果文件被修改,签名就会失效,系统就不会安装这个应用。
  • 应用升级校验:当应用需要升级时,系统会检查新版本的签名是否与旧版本一致,从而确保升级是来自同一个开发者。
  • 权限授予:某些系统级权限的授予会基于签名,比如ACL权限和消息推送等。

3. Profile文件

Profile格式为.p7b,包含HarmonyOS应用/元服务的包名、数字证书信息、HarmonyOS应用/元服务允许申请的证书权限列表,以及允许应用/元服务调试的设备列表(如果应用/元服务类型为Release类型,则设备列表为空)等内容。Profile文件分为调试Profile和发布Profile两种。

点击放大

4. 流水线搭建

【定位思路】

cat命令为Linux查看文件内容的命令,但profile文件不是纯文本信息,使用cat查看会出现乱码。

【解决方案】

通过命令行工具提供的hap-sign-tool.jar 获取profile中的信息保存至变量或者文件中。

json=$(java -jar hap-sign-tool.jar verify-profile -inFile testDebug.p7b)
key='bundle-name'
value=$(echo $json | awk -v k="$key" 'BEGIN{RS=","; FS=":"} $1 ~ "\""k"\""{gsub(/[{}"]/,"",$2); print $2}')
echo $value

然后再通过cat或者awk解析出profile中的bundle-name的值,再与项目文件app.json中的bundleName比较即可。

【总结】

签名能够确保文件在传输和安装过程中没有被篡改,在搭建流水线时,可以通过官网提供的命令行工具中的签名工具hap-sign-tool.jar校验包名和工程项目中的包名是否一致,提前发现问题。通过该方法,还可以获得type、developer-id、validity,开发者也可使用同样方法,对这些字段进行校验。

点击放大


更多关于HarmonyOS鸿蒙Next中通过命令行获取profile文件中的bundleName信息失败怎么办的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中通过命令行获取profile文件中的bundleName信息失败怎么办的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,通过命令行获取profile文件中的bundleName信息失败

可能是由于文件路径错误或权限不足。确保使用正确的命令格式,如:

hdc shell bm get -u <user-id> -p <profile-path>

并检查profile文件是否存在且路径正确。如果问题依旧,尝试重新生成profile文件或检查系统日志以获取更多错误信息。

回到顶部