简体中文
mainfest.json
里面配置的应用版本名称/应用版本号(versionName
/versionCode
)应用于鸿蒙平台,且优先于 harmony-configs/AppScope/app.json5
中的设置HBuilderX 4.24 版本开始支持【运行到鸿蒙】,具体的方式是开发者下载鸿蒙工程模板并创建独立的鸿蒙工程目录,
然后在 uni-app 项目中的 manifest.json
里面设置 app-harmony.projectPath
属性来指向这个鸿蒙工程目录,
uni-app 项目在编译时把编译产物输出到鸿蒙工程目录,然后调起 DevEco Studio 打开鸿蒙工程目录,由开发者手动完成后续的运行调试工作。
HBuilderX 4.27+ 开始已经把鸿蒙工程模板内置到 HBuilderX 中,【运行到鸿蒙】时自动创建鸿蒙工程目录,与 uni-app 项目的编译产物合并, 然后调用鸿蒙工具链完成打包和安装、运行等操作,同时从运行设备上收集输出的日志显示到 HBuilderX 的控制台。
新的内置模板的方式虽然在调试运行过程中不再调起 DevEco Studio,但一般来说仍然需要安装 DevEco Studio,因为:
在 DevEco Studio 中打开任意一个项目(也可以新建一个空项目),然后在下图的位置进入设备管理器:
如果没有登录华为账号,此时需要先登录,登录成功后看到如下页面
选择模拟器型号,选第一个即可
安装完模拟器后,点击启动按钮启动模拟器
注意:真机需要鸿蒙系统版本 API 12 以上
打开鸿蒙手机开发者模式,开启USB调试,通过USB线连接电脑,在此处能看到对应的设备标识符则表示连接成功
打开HBuilderX,点击上方菜单 - 工具 - 设置,再点击 运行配置,在鸿蒙运行配置中设置 DevEco Studio 的安装路径。
HBuilderX 新建一个空白的 uni-app 项目,选vue3(也可使用已有的uni-app vue3项目)
编译 uni-app 到鸿蒙
点击 HBuilderX 上方【运行】菜单 - 运行到手机或模拟器 - 运行到鸿蒙
harmony-configs
目录用于存放鸿蒙配置文件参考:更多配置指南
参考:证书签名配置指南
数字签名证书需要配置到 harmony-configs/build-profile.json5
中,这个文件等同于一个普通的鸿蒙工程中对应的文件。
申请证书的操作要在 DevEco Studio 中完成,如果是自己在华为的 AppGallery Connect 网站上手动申请证书,也需要 DevEco Studio 配合才能最终得到所需的 build-profile.json5
文件。
DevEco Studio 且须先打开一个鸿蒙工程才可进行证书相关的操作,建议先执行一次【运行到鸿蒙】,然后在项目的 unpackage
目录下找到临时生成的鸿蒙工程目录,
在 DevEco Studio 里面打开后再进行后面的操作。
如果是自己在 DevEco Studio 里面独立创建一个新的鸿蒙工程,虽然也可以用于申请证书,但需注意以下几点:
由于证书资料中包含应用的包名,所以在这个鸿蒙工程中设置的应用包名应该与将要开发的 uni-app 应用项目中设置的鸿蒙应用包名(在 manifest.json
中设置)相一致,这样申请到的证书资料才会有效;
这个鸿蒙工程的根目录中的 build-profile.json5
文件中的内容应该与 HBuilderX 自动生成的鸿蒙工程中的对应文件保持一致,否则在后续操作中可能产生异常。
如果有用到 ACL 权限,需在 entry/src/main/module.json5
中声明,这样获得的证书中才能包含相关的授权。参考 权限配置指南
完成申请证书的操作之后,把这个鸿蒙工程中的 build-profile.json5
文件复制到 uni-app 项目的 harmony-configs/build-profile.json5
即可。
点击 DevEco Studio 上方菜单 File - Project Structure...
在使用模拟器进行调试运行的时候,一般是不需要做数字签名的,但如果是用真机进行调试运行,或者业务代码用到了 ACL 权限,那么就需要申请并配置一个调试证书用于数字签名。
参考 申请调试证书
在对话框中选择 Project - Signing Configs,并勾选 Automatically generate signature,即可自动生成签名证书资料
参考 自动签名
通过 DevEco Studio 自动申请得到的证书,缺省会保存到电脑的用户目录下,在 Windows 系统中一般是 %USERPROFILE%\.ohos\config
,在 Mac 系统中一般是 ~/.ohos/config
。
配置信息中包含的三个文件缺省都是采用绝对路径来表示,也可以把这些文件移到 harmony-configs
目录下,这样就可以使用相对路径来表示,相对于 harmony-configs
目录。
如果要移动证书文件的位置,需注意跟这三个文件一起的还有一个名为 material
的目录,也要一起移动。
也可以在对话框中填写手动申请到的证书,填写的时候注意三个文件要在同一个目录。
完成以上操作后,鸿蒙工程中的 build-profile.json5
文件就包含了完整的调试证书配置信息(在 app.signingConfigs
数组里,name
属性的值是 "default"
)。
在发行安装包的时候,一定需要配置一个发布证书,否则只能拿到一个未签名的安装包,是无法实际使用的。
发布证书只能手动申请,申请完成后把拿到的相关资料文件填写到 DevEco Studio 里面,填写的时候注意三个文件要在同一个目录。
参考 申请发布证书
在对话框中选择 Project - Signing Configs,不要勾选 Automatically generate signature,创建一个名为 release
的配置项。
完成以上操作后,鸿蒙工程中的 build-profile.json5
文件就包含了完整的发布证书配置信息(在 app.signingConfigs
数组里,name
属性的值是 "release"
)。
无论是调试证书还是发布证书,生成的证书资料信息都在鸿蒙工程根目录下的 build-profile.json5
文件中,把这个文件复制到 uni-app 项目的 harmony-configs/build-profile.json5
即可。
使用 HBuilderX 4.28+,点击【发行】-【App-Harmony-本地打包】
如果项目中没有 harmony-configs
目录,此时会自动生成。
如果日志窗口提示没有配置签名证书资料,则去 配置发布证书的资料
配置完证书资料后,再次点击【发行】- 【App-Harmony-本地打包】即可得到已签名的 .app
安装包文件
最后还需参考鸿蒙官方文档发布鸿蒙应用到应用市场,详见文档
部分API需要在配置文件显示声明权限才能调用,权限的配置文件路径为:/harmony-configs/entry/src/main/module.json5
,配置节点为:requestPermissions
,如下图所示
具体请查看以下文档
HBuilderX 支持把 manifest.json
里面的一些配置项传递给鸿蒙工程,打开这个文件,下面这些配置项与鸿蒙相关:
目前这里的应用名称、应用版本名称、应用版本号将传递给鸿蒙工程使用。
这里的配置是专用于传递给鸿蒙工程使用。
以上的配置项有可能随着 HBuilderX 的升级而有所增加,其优先级高于后面所述的 harmony-configs
目录。如果这些仍没有满足需求,则可以自行在 harmony-configs
目录中进行配置。
harmony-configs
配置目录项目的根目录下有一个 harmony-configs
目录,每当执行跟鸿蒙相关的操作时,HBuilderX 都会检查这个目录,如果目录不存在则会自动创建。
HBuilderX 早期版本所创建目录初始会存在几个常用的配置文件,4.36+ 版本该目录初始为空。
在执行运行或者发行到鸿蒙的操作过程中,HBuilderX 会根据内置模板生成一个鸿蒙工程目录(一般在 unpackage
目录下游),然后把 harmony-configs
目录下的所有内容都原样覆盖过去,
然后再调用鸿蒙的工具链进行编译打包等操作。
所以,harmony-configs
目录中的所有文件最终都会原样进入鸿蒙工程目录参与项目构建,所有需要对鸿蒙工程的定制化配置都可以写在这个目录下。
注意:在 manifest.json
支持的鸿蒙相关的配置项将具有更高的优先级。
注意:harmony-configs
目录下应该仅放置必要的文件,多余的文件有可能对鸿蒙工具链的执行产生意外的干扰,导致项目无法正常编译打包。
注意:当升级 HBuilderX 到新版本之后,由于其内置的鸿蒙工程模板有可能调整,导致与旧版本的配置文件产生不兼容的情况,所以如果以前正常的项目在升级后出现打包错误的话,
建议清空 harmony-configs
目录的原有内容(注意做好备份),再删除 unpackage
目录,重新运行之后再按需要逐步恢复 harmony-configs
里面应有的配置。
关于 harmony-configs
目录的使用要遵守鸿蒙的技术规范,具体可参考 鸿蒙官方文档
经常会用到的配置文件有:
harmony-configs/build-profile.json5
其中的 app.signingConfigs
用于设置数字签名资料,参见 证书签名配置指南
harmony-configs/entry/src/main/module.json5
修改其中的 module.requestPermissions
来设置运行权限,参见 权限配置指南
harmony-configs/AppScrope/app.json5
其中的 app.bundleName
用于设置应用包名。
HX 4.31+ 已经支持在项目的 manifest.json
里面以图形界面修改应用包名,如果在那里做了设置,将优先于这里的设置。
其中的 app.versionName
和 app.versionCode
用于设置应用版本名称和版本号。
HX 4.43+ 已经支持使用项目的 manifest.json
里面的应用版本名称和版本号,将优先于这里的设置。
一般而言,新版本已经不再需要 harmony-configs/AppScrope/app.json5
文件了。
manifest.json 里面已经支持一些应用配置项,未直接支持的可以通过 harmony-configs
来设置,详情参见 更多配置指南。
同时可以参考鸿蒙官方文档:应用/组件级配置
为保证图标在系统内显示的一致性,应用预置的图标资源应满足以下要素:
启动页可以配置背景色代码(默认为#FFFFFF)和一张启动图,启动图没有尺寸要求,但建议为正方形logo图
仅 APP-HARMONY 和 APP 可以条件编译命中鸿蒙平台,APP-PLUS 不能命中中鸿蒙平台
// #ifdef APP-HARMONY
console.log("仅鸿蒙会编译")
// #endif
// #ifndef APP-HARMONY
console.log("仅非鸿蒙会编译")
// #endif
// #ifdef APP
console.log("安卓、苹果、鸿蒙会编译,小程序和Web不会编译")
// #endif
// #ifndef APP
console.log("安卓、苹果、鸿蒙不会编译,小程序和Web会编译")
// #endif
// #ifdef APP-PLUS
console.log("安卓、苹果会编译,鸿蒙不会编译,小程序和Web也不会编译")
// #endif
// #ifndef APP-PLUS
console.log("安卓、苹果不会编译,鸿蒙会编译,小程序和Web也会编译")
// #endif
HBuilderX 4.27 以前的版本需要在 DevEco Studio 中运行由 uni-app 项目生成的鸿蒙工程,虽然鸿蒙官方文档提供了如何开启热重载,详见文档, 但目前只能针对 ets 文件的修改进行热更,还无法针对 uni-app 打包的 js 文件进行热更。
HBuilderX 4.27+ 支持直接运行到鸿蒙设备,修改源代码之后需重新调用鸿蒙工具链编译打包,并重新安装到鸿蒙设备上运行,不支持热重载。
HBuilderX 4.41+ 支持热重载,但跟具体修改的代码文件有关,如果进行了无法热重载的修改,会自动重新安装整个应用并重新运行。
运行到鸿蒙时,在 uni-app 页面通过 console.log 打印日志可以直接在 HBuilderX 查看。
HBuilderX 4.41+ 在真机运行时需要连接到与主机电脑相同的局域网才能正确接收到日志。
注意:在 UTS 代码里面打印对象或数组时,需要 JSON.stringify
才能正确显示内容,如 console.log("obj", JSON.stringify(obj))
HBuilderX 早期版本使用鸿蒙工具链中的 hilog 来收集日志并显示,可能因为设备连接问题或者鸿蒙系统版本升级调整等原因导致日志收集不到。
HBuilderX 4.41+ 在真机运行时需要连接到与主机电脑相同的局域网才能正确接收到日志。
另外,HBuilderX 4.41+ 在控制台工具条中增加了“显示原生日志”的选项,开启后可以看到更多的日志内容。
作为一个应急处理方案,可以打开一个命令行窗口,执行命令 hdc shell hilog -T JSAPP
来直接从连接的鸿蒙设备查看日志。
如果配置了 harmony-configs/build-profile.json5
文件,请确认里面的 app.products
设置了 "useNormalizedOHMUrl": true
。
如果不是上述的原因,最常见的情况就是使用了不支持的组件或者 API,请逐个排查所使用的组件和 API 是否已经兼容了鸿蒙平台,
可以尝试对 pages.json
进行代码二分法排查(删除一半页面如果正常了代表被删除的那一半页面中有造成白屏或闪退的页面)。
确保签名证书资料没有问题的情况下,尝试重启电脑
此问题仅会在 HBuilderX 4.27 以前的版本存在,因为编译 uni-app 代码完成之后需要调起 DevEco Studio 来运行鸿蒙工程。
请用下面的方法确保设置的 DevEco Studio 安装路径是正确的,重新设置之后请重启 HBuilderX。
Windows系统
Windows系统快速复制路径方法
注意:复制后的 \
要改成 /
原路径后面添加 /bin/devecostudio64.exe
,然后重启 HBuilderX
Mac系统
Mac系统快速复制路径方法
原路径后面添加 /Contents/MacOS/devecostudio
,然后重启 HBuilderX
当前导航栏未支持,可以尝试关闭原生导航栏,使用自己的自定义导航栏组件实现。
HBuilderX 4.31起支持uniPush推送,具体配置请参考文档
Cannot read property route of undefined
此问题由于arkTs的混淆Bug引发,即使进入到一个空的组合式api页面也会出现这个报错,已反馈给鸿蒙团队处理。
临时解决方案:在鸿蒙项目entry/obfuscation-rules.txt
文件中增加一行-disable-obfuscation
来禁用混淆。
依赖包与运行设备不兼容 Install Failed: error: failed to install bundle
此章节仅针对HBuilderX 4.29及之前版本,4.31及之后的版本暂不支持在x86_64平台的模拟器上运行。
在 x86_64 平台(绝大多数 Windows 系统和部分 MacOS 系统)上使用【运行到鸿蒙】并选择了模拟器作为运行设备的时候,可能会遇到这个报错。
这是由于 HBuilderX 4.29 及之前版本在默认配置里面依赖了支付宝SDK,而这个包不支持运行在 x86_64 平台的模拟器上,所以在打包后安装到模拟器设备时会报错。
出现这种情况时,如果并不需要这个依赖,可以修改 harmony-configs/oh-package.json5
文件,在 dependencies
里面删除 @cashier_alipay/cashiersdk
就行了;
如果确实需要,那就只能改用真机设备来运行了。
目前 HBuilderX 尚不支持断点方式对运行于鸿蒙设备上的 uni-app 应用进行调试,必要时可借助 DevEco Studio 在鸿蒙工程层面进行调试。
HBuilderX 4.27+ 开始不再自动调起 DevEco Studio,需要手动调起 DevEco Studio 打开由 HBuilderX 自动生成的鸿蒙工程目录,
该目录可以在 unpackage
目录下找到,一般是在类似 unpackage/debug/app-harmony-xxx
的位置,如果是 cli 项目的话则是在 dist
目录下。
可以参考鸿蒙的文档 使用DevTools工具调试前端页面 进行处理。
在 uni-app 的开发模式 setWebDebuggingAccess
会自动开启,此步骤可以跳过。
首先,HBuilderX 4.31+ 构建的鸿蒙运行包依赖于运行设备中的 JSVM,由于兼容性限制目前尚不能运行于 x86_64 平台的模拟器,所以绝大部分 Windows 系统用户无法使用鸿蒙模拟器。
在满足兼容性要求的前提下,如果要在 Windows 系统如使用模拟器则需要开启以下功能
打开控制面板 - 程序与功能 - 开启以下功能
注意: 需要win10专业版或win11专业版才能开启以上功能,家庭版需先升级成专业版或企业版
cli 项目的 uni-app 编译器是跟随项目配置的,跟 HBuilderX 的版本并不直接相关,如果是以前创建的 cli 项目,可能因为关联的编译器版本太低而出现此现象。
建议升级 cli 项目的编译器版本,参考 更新编译器的版本
删除 harmony-configs
目录(如果目录里有自己修改过的内容请先做好备份),再删除 unpackage
目录,然后重试。
EPERM: operation not permitted, copyfile ...
源代码中有资源文件(比如图片)带有只读属性,导致再次打包的时候鸿蒙工具链删除失败报错。找到有问题的文件去掉只读属性,再删除 unpackage
目录,重试即可。
hvigor ERROR: Tools execution failed
HBuilderX 在打包的时候会调用鸿蒙的工具链,其中用到了 java 程序,这种问题一般是因为 java 程序版本不匹配导致的。 早期版本是优先使用环境变量 PATH 里面能找到的 java 程序,临时的解决办法是在 PATH 环境变量里去掉 java 程序的路径,再重新启动 HBuilderX。 HBuilderX 4.31+ 会优先使用鸿蒙工具链自带的 java 程序,就不会是这个原因了。
检查电脑上安装的 java 版本,可能是版本过低。建议卸载 java 或者在 PATH 环境变量里去掉 java 的路径。 新版本(4.31+)已调整为优先使用鸿蒙工具链自带的 java 就不会受这个影响了。
Unexpected token (Note that you need plugins to import files that are not JavaScript)
或 Please make sure that the splash page has one and only one '@Entry' decorator
鸿蒙工具链运行时要求所涉及到的文件的路径总长度不能超过 255 个字符。请尝试把 uni-app 项目的目录位置改到一个比较短的路径下,可能会避开这个问题。
...HBuilderX\plugins\node\npm.cmd install,pnpm execute failed
或 network request to https://registry.npmjs.org/pnpm failed
鸿蒙工具链在首次运行的时候需要安装一些依赖的工具,且此操作只能在 DevEco Studio 中才能正确执行,方法是在 DevEco Studio 里面随便创建一个工程然后构建运行一下即可。
如果在 DevEco Studio 里面也报了同样的错误,则可以尝试自行设置 npm 的镜像源来解决问题,比如设置环境变量 NPM_CONFIG_REGISTRY=https://registry.npmmirror.com
使用境内的镜像源。
hvigor ERROR: Schema validate failed
可能是使用的 DevEco Studio 版本过低,要求 5.0.3.800+。
也可能是自行配置的 harmony-configs/build-profile.json5
文件里面有错误,导致 DevEco Studio 无法正确解析。
请参考 文档 的方法确保配置正确。
运行所需的权限没有签名授权
参考 权限配置指南
这是由于默认配置里面声明申请了一些权限,其中包含受限权限(需要白名单授权的 ACL 权限),这就要求安装包必须用具备足够权限授权的数字证书进行签名,否则无法安装到设备上。
目前已知的 ACL 权限包括:
ohos.permission.WRITE_IMAGEVIDEO
ohos.permission.WRITE_CONTACTS
ohos.permission.READ_PASTEBOARD
如果业务代码里面并没有实际使用到这些权限,一个简单的办法就是修改 harmony-configs/entry/src/main/module.json5
文件,
删除 module.requestPermissions
数组里面涉及这三项的内容,重新运行即可。
注:从 HX 4.31+ 开始默认配置中已经不再包含 ACL 权限,如果需要的话请自行修改 harmony-configs/entry/src/main/module.json5
文件添加权限声明。
如果确实需要这里的某些权限,那就需要申请一个调试证书,并配置到 harmony-configs/build-profile.json5
文件的 app.signingConfigs
中。
具体请参考 调试用的数字签名证书
配置的 bundleName 与签名证书不符
如果配置了签名证书,打包之后会进行签名,但如果项目中配置的 bundleName
与签名证书申请时所填报的 bundleName
不符,就会报这个错。
可以修改 harmony-configs/AppScrope/app.json5
文件中 app.bundleName
为签名证书申请时所填的应用包名,
也可以根据配置的 bundleName
重新申请证书。
注:从 HX 4.31+ 开始应该在项目的 manifest.json 文件的【鸿蒙App配置】中设置【包名】。
签名验证失败
当运行到鸿蒙时,在把打包后的 .hap
安装到设备上时,可能会遇到这个报错。
一个常见的原因是当前使用的设备没有添加到签名用的 profile 文件中,要解决这个问题,
首先要 注册调试设备,
然后 申请调试Profile
或修改已有的 profile 文件并重新下载。
没有签名无法安装
当运行到鸿蒙时,如果选择真机为运行设备,则必须配置好数字签名证书,否则无法安装到真机上。
签名不一致
当运行到鸿蒙时,所使用的签名证书与鸿蒙设备中已安装的应用不一致,此时无法覆盖安装。请先手动删除已安装的应用。
安装超时,设备没有响应
有记录显示,在 Windows 系统下,运行到鸿蒙时如果选择模拟器作为运行设备,可能会出现超时的情况,原因尚不清楚,有可能与模拟器系统里存在以前安装的相同包名的应用有关, 如遇这种情况,可以尝试手工在模拟器里面删除旧的应用然后重试。
检测到App真机运行插件出现破损
由于未知原因导致【App真机运行】插件出现破损,需要重新安装。 请在 HX 主菜单中选择【工具>插件安装】,找到【App真机运行】插件并点击卸载,然后在主菜单中选择【运行>运行到手机或模拟器>下载真机运行插件】重新安装。 如果安装过【App真机运行(uni-app x)】插件,需要先卸载掉,否则无法卸载【App真机运行】插件。
未正确配置鸿蒙应用的包名
应该在 manifest.json
的【鸿蒙配置】中设置正确的包名,具体要求请参考 配置应用包名