Hi3516DV300开发板——8. 为HarmonyOS鸿蒙Debug贡献代码——修复了因bundleName无法识别下划线(_)导致安装Hap包失败

前言

✨✨✨✨✨✨✨✨✨✨✨✨

完成PR合并后还是很开心,也是为鸿蒙贡献过代码的人儿了哈哈哈。

PR合并完成:
Hi3516DV300开发板——8. 为HarmonyOS鸿蒙Debug贡献代码——修复了因bundleName无法识别下划线(_)导致安装Hap包失败_第1张图片


该问题是怎么引起的?

昨天创建了一个带下划线的 Project Name:smart_test 的工程名称

因为工程名称会随之转为 Package Name:com.example.smart_test 的package(包)

然后在Hi3516DV300 开发板中使用 ./bm install -p smart_test.hap 无法安装该 smart_test.hap

报如下错误:resultMessage is ERR_APPEXECFWK_INSTALL_FAILED_PARSE_INVALID_BUNDLENAME

Hi3516DV300开发板——8. 为HarmonyOS鸿蒙Debug贡献代码——修复了因bundleName无法识别下划线(_)导致安装Hap包失败_第2张图片


原因(目的、解决的问题等)

因为bundleName在进行匹配的时候没有进行下划线匹配。


!!!!下划线的重要性!!!!

因为在DevEco Studio创建命名规则 规定可以使用下划线,所以下划线的判断是很有必要且重要的!!!
Hi3516DV300开发板——8. 为HarmonyOS鸿蒙Debug贡献代码——修复了因bundleName无法识别下划线(_)导致安装Hap包失败_第3张图片

目的:

解决该问题,并使下划线的名称的Hap包也可以安装到系统中


做了什么


  1. 加入调试信息DEBUG,跟踪错误找到源代码中 foundation/appexecfwk/services/bundlemgr_lite/src/bundle_parser.cpp 文件中

    BundleParser::ParseJsonInfo() 函数的

    第326行CHECK_IS_TRUE(CheckBundleNameIsValid(bundleProfile.bundleName),

    ERR_APPEXECFWK_INSTALL_FAILED_PARSE_INVALID_BUNDLENAME);

    中判断出错。
    根源问题

  2. 继续进入BundleParser::CheckBundleNameIsValid(const char *bundleName)函数中加入相关调试信息
    Hi3516DV300开发板——8. 为HarmonyOS鸿蒙Debug贡献代码——修复了因bundleName无法识别下划线(_)导致安装Hap包失败_第4张图片
    运行结果如下: Hi3516DV300开发板——8. 为HarmonyOS鸿蒙Debug贡献代码——修复了因bundleName无法识别下划线(_)导致安装Hap包失败_第5张图片

  3. 说明其中regex_match(bundlename, re) 有问题

    其中bundlenamecom.example.smart_test

    而其中 repattern 正则表达式:

    { "([a-zA-Z0-9]+\\.)+[a-zA-Z0-9]+" }

    的相关匹配。

  4. 然后对正则表达式分析,发现后面正则中的第二部分未进行下划线(_)的判断。

变更了什么

此次变更仅涉及到了foundation/appexecfwk/services/bundlemgr_lite/src/bundle_parser.cpp 文件中第82行代码。

  • 变更前:

    std::string pattern { "([a-zA-Z0-9]+\\.)+[a-zA-Z0-9]+" };
    
  • 变更后:

    std::string pattern { "([a-zA-Z0-9]+\\.)+[a-zA-Z0-9_]+" };
    

改动影响的功能:

DevEco Studio生成的Hap包不受制包名称的限制,均可正常安装到机器中。

测试结果:

Hi3516DV300开发板——8. 为HarmonyOS鸿蒙Debug贡献代码——修复了因bundleName无法识别下划线(_)导致安装Hap包失败_第6张图片

解决的问题:

修复了因bundleName无法识别下划线(_)导致安装Hap包失败

你可能感兴趣的:(嵌入式Linux,Hi3516DV300,HarmonyOS,Hi3516DV300,HarmonyOS,鸿蒙系统,bundlename,hap安装失败)