前言
✨✨✨✨✨✨✨✨✨✨✨✨
完成PR合并后还是很开心,也是为鸿蒙贡献过代码的人儿了哈哈哈。🌚
PR合并完成:
该问题是怎么引起的?
昨天创建了一个带下划线的 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
原因(目的、解决的问题等)
因为bundleName
在进行匹配的时候没有进行下划线匹配。
!!!!下划线的重要性!!!!
因为在DevEco Studio
创建命名规则 规定可以使用下划线,所以下划线的判断是很有必要且重要的!!!
目的:
解决该问题,并使下划线的名称的Hap包也可以安装到系统中
做了什么
-
加入调试信息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);
中判断出错。
-
继续进入
BundleParser::CheckBundleNameIsValid(const char *bundleName)
函数中加入相关调试信息
运行结果如下: -
说明其中
regex_match(bundlename, re)
有问题其中
bundlename
为com.example.smart_test
而其中
re
为pattern
正则表达式:
{ "([a-zA-Z0-9]+\\.)+[a-zA-Z0-9]+" }
的相关匹配。
-
然后对正则表达式分析,发现后面正则中的第二部分未进行下划线(_)的判断。
变更了什么
此次变更仅涉及到了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包不受制包名称的限制,均可正常安装到机器中。
测试结果:
解决的问题:
修复了因bundleName无法识别下划线(_)导致安装Hap包失败