前言
兼容Android、IOS两个环境已经苦不堪言,又冒出了个鸿蒙系统,有点雪上加霜,摸鱼的时光遥遥无期。好消息是uni-app兼容鸿蒙了,不需要学会鸿蒙原生开发,也能有自己的鸿蒙应用,坏消息是它也才刚刚支持,要陪它一路踩坑,又是个坎坷的心路历程,作为先吃螃蟹的我,将最近遇到问题做了如下汇总,希望能帮助到正在或者将要使用uni-app开发鸿蒙应用的你。
一、@rollup/rollup-darwin-x64未安装
看到这个问题很容易就条件反射出是@rollup/rollup-darwin-x64
包未安装,直接对其进行安装即可。存在的坑点是在mac中直接安装会报CPU架构arm64与此模块不兼容
的错误,然后安装arm64版本的这个包@rollup/rollup-darwin-arm64
也不行,我使用的解决方式是在mac安装的时候添加参数--ignore-platform
来忽略CPU架构强制安装,认知有限,目前也没找到更好的解决方式,就先这样子解决。
- window 安装
yarn add @rollup/rollup-darwin-x64 -D
- mac 安装
yarn add @rollup/rollup-darwin-x64 -D --ignore-platform
二、harmony-configs 配置内容缺失
看到这个错误,你可能会想着配置包名,但错误的本质是因为uni-app运行为鸿蒙App需要harmony-configs配置,但HbuilderX从4.32版本就不默认生成harmony-configs配置,只会生成个空文件夹,然后去官方群里问,会告诉你自己去鸿蒙应用那边拷贝,但是你并不知道需要拷贝什么,所以可以使用hbuilder4.29版本运行项目,生成个默认的harmony-configs,然后在根据运行的错误做对应的修改,这样子容易一些。
三、在harmony-configs/entry/src/main/ets找不到对应包
在构建鸿蒙应用时,试图从本地路径harmony-configs/entry/src/main/ets获取对应的包,但是没有找到,在harmony-configs/oh-package.json5文件中可以看到这些包的对应配置,我查看鸿蒙应用默认也没这些依赖配置,可以先对其进行删除,后续需要在进行添加。
四、useNormalizedOHMUrl需要为true
harmony-configs/build-profile.json5 文件下的app.products添加useNormalizedOHMUrl为true配置,修改后代码如下。
products: [
{
name: 'default',
signingConfig: 'default',
compatibleSdkVersion: '5.0.0(12)',
runtimeOS: 'HarmonyOS',
buildOption: {
strictMode: {
caseSensitiveCheck: true,
useNormalizedOHMUrl: true,
},
},
},
{
name: 'release',
signingConfig: 'release',
compatibleSdkVersion: '5.0.0(12)',
runtimeOS: 'HarmonyOS',
buildOption: {
strictMode: {
caseSensitiveCheck: true,
useNormalizedOHMUrl: true,
},
},
},
],
五、$media:app_icon未定义
uni-app构建为鸿蒙应用时,会将harmony-config的所有配置合并到鸿蒙应用中,$media读取的是harmony-configs/AppScope/resources/base/media文件夹下的资源,所以只需要在创建对应文件harmony-configs/AppScope/resources/base/media,然后在该文件夹下添加app_icon名称的资源,如app_icon.png的图片。
六、$string:location_tips 变量不存在
不止location_tips这个变量,还有其他变量会报类似的错误,但需要知道$string读取的是harmony-configs/AppScope/resources/base/element/string.json配置的字符串变量,创建对应文件,然后配置对应变量值。location_tips就是配置中对应name字段的值,value为变量的实际内容,初始化项目大概需要的如下几个变量,配置如下:
{
"string": [
{
"name": "app_name",
"value": "HBuilder"
},
{
"name": "location_tips",
"value": "获取您的定位,用于位置服务"
},
{
"name": "write_imagevideo_tips",
"value": "保存图片或视频至设备存储"
},
{
"name": "get_networkinfo_tips",
"value": "获取网络状态信息以确保连接稳定"
},
{
"name": "get_wifiinfo_tips",
"value": "获取 Wi-Fi 信息以优化网络体验"
},
{
"name": "write_contacts",
"value": "保存联系人信息到您的通讯录"
},
{
"name": "microphone",
"value": "录制音频或语音输入"
},
{
"name": "access_biometric",
"value": "使用生物识别功能(如指纹或面部识别)"
},
{
"name": "read_pasteboard",
"value": "读取剪贴板内容以粘贴文本或图片"
}
]
}
七、运行所需的权限没有签名授权
这个可以参考uni-app文档,查看文档,将需要签名的权限先删除掉,这几个也不一定需要用到,后续需要在进行添加。
八、一些点
- window上的模拟器没有浏览器,mac模拟器上有
- 在web-view中请求即使和App中的域名同源也没办法携带cookie
- 在web-view中没办法通过urlSchemes协议唤起App,在浏览器中可以
总结
这是最近一阶段使用uni-app开发鸿蒙系统的遇到的一些问题,后续也会做进一步的补充,另外如果你也有需要将vue2老项目实现对于鸿蒙支持,可以参考我的这篇文章uni-app中h5和App通讯,兼容鸿蒙
如果觉得这篇文章对您有帮助,欢迎点赞收藏,有问题也欢迎指出。