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

#### 问题现象

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

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/9e/v3/Kd5PbOgVTjaaJlcPoIaEvA/zh-cn_image_0000002658808545.png?HW-CC-KV=V1&HW-CC-Date=20260709T134402Z&HW-CC-Expire=86400&HW-CC-Sign=5367B4EC2AAC56E3BF4151EF7DCEDF261CD7F6480DA499F118D0EA527EE80DE4 "点击放大")

#### 知识背景

1.  **为什么要校验profile中的包名**？
    
    签名可能会因为签名所需要的profile文件与工程中的包名不同、当前不在profile有效期内等原因导致签名失败，提前校验可以尽早发现问题，符合测试左移的工程原则。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/38/v3/25_ODtnnRYONWZ3BDnsoZQ/zh-cn_image_0000002628569170.png?HW-CC-KV=V1&HW-CC-Date=20260709T134402Z&HW-CC-Expire=86400&HW-CC-Sign=D83814F380CC03F714C9394E0B5B16FEE516A55ACFF147E944C36E811B1F7440 "点击放大")
    
    此校验过程在搭建流水过程中下图的红框部分，构建后签名前的校验脚本中。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c1/v3/mGnvwQzDRPiVLxCEV2xHkA/zh-cn_image_0000002658928495.png?HW-CC-KV=V1&HW-CC-Date=20260709T134402Z&HW-CC-Expire=86400&HW-CC-Sign=A05386465DBB804FA777732E8F59808719B83873A9CCBCEBED5A4AC5181DD68C "点击放大")
    
2.  **签名的作用**。
    *   应用身份识别：每个包文件都有一个唯一的签名，系统通过它来识别应用的身份。
    *   保证应用完整性：签名能够确保包文件在传输和安装过程中没有被篡改。如果文件被修改，签名就会失效，系统就不会安装这个应用。
    *   应用升级校验：当应用需要升级时，系统会检查新版本的签名是否与旧版本一致，从而确保升级是来自同一个开发者。
    *   权限授予：某些系统级权限的授予会基于签名，比如ACL权限和消息推送等。
3.  **Profile文件**。
    
    Profile格式为.p7b，包含HarmonyOS应用/元服务的包名、数字证书信息、HarmonyOS应用/元服务允许申请的证书权限列表，以及允许应用/元服务调试的设备列表（如果应用/元服务类型为Release类型，则设备列表为空）等内容。Profile文件分为调试Profile和发布Profile两种。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/9f/v3/bPQwPGuVTQCIFZyZSeEN7w/zh-cn_image_0000002628409276.png?HW-CC-KV=V1&HW-CC-Date=20260709T134402Z&HW-CC-Expire=86400&HW-CC-Sign=EE12A54F9CD2AD2125BCB987A8B43E8943FD96089CF596CF7EBFD048E74D11B6 "点击放大")
    
4.  **[搭建流水线](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-command-line-building-app)**。

#### 问题定位

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

#### 分析结论

无法直接通过查看profile文件获取bundleName。

#### 修改建议

通过命令行工具提供的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，开发者也可使用同样方法，对这些字段进行校验。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/95/v3/tuhLPOSRS1ibGrWfCJ6EFQ/zh-cn_image_0000002658808547.png?HW-CC-KV=V1&HW-CC-Date=20260709T134402Z&HW-CC-Expire=86400&HW-CC-Sign=2870198903174CD92E5B9E217249C5B8A558C964DB365385EB5C6AC7A26F98F7 "点击放大")