uni-app开发鸿蒙应用之疑难杂症(持续更新~)

1,436 阅读4分钟

前言

兼容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

image.png

二、harmony-configs 配置内容缺失

看到这个错误,你可能会想着配置包名,但错误的本质是因为uni-app运行为鸿蒙App需要harmony-configs配置,但HbuilderX从4.32版本就不默认生成harmony-configs配置,只会生成个空文件夹,然后去官方群里问,会告诉你自己去鸿蒙应用那边拷贝,但是你并不知道需要拷贝什么,所以可以使用hbuilder4.29版本运行项目,生成个默认的harmony-configs,然后在根据运行的错误做对应的修改,这样子容易一些。

image.png

三、在harmony-configs/entry/src/main/ets找不到对应包

在构建鸿蒙应用时,试图从本地路径harmony-configs/entry/src/main/ets获取对应的包,但是没有找到,在harmony-configs/oh-package.json5文件中可以看到这些包的对应配置,我查看鸿蒙应用默认也没这些依赖配置,可以先对其进行删除,后续需要在进行添加。

image.png

image.png

四、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,
      },
    },
  },
],

image.png

五、$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的图片。

image.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": "读取剪贴板内容以粘贴文本或图片"
    }
  ]
}

image.png

七、运行所需的权限没有签名授权

这个可以参考uni-app文档,查看文档,将需要签名的权限先删除掉,这几个也不一定需要用到,后续需要在进行添加。

image.png

八、一些点

  • window上的模拟器没有浏览器,mac模拟器上有
  • 在web-view中请求即使和App中的域名同源也没办法携带cookie
  • 在web-view中没办法通过urlSchemes协议唤起App,在浏览器中可以

总结

这是最近一阶段使用uni-app开发鸿蒙系统的遇到的一些问题,后续也会做进一步的补充,另外如果你也有需要将vue2老项目实现对于鸿蒙支持,可以参考我的这篇文章uni-app中h5和App通讯,兼容鸿蒙

如果觉得这篇文章对您有帮助,欢迎点赞收藏,有问题也欢迎指出。