鸿蒙 DevEco Studio:Hot Reload热重载
·

开发中,调试效率直接影响开发体验。DevEco Studio提供Hot Reload(热重载)能力,支持在真机或模拟器上运行/调试应用时,修改代码并保存后无需重启应用,即可使用最新的代码,更快速地进行调试。
一、热重载、热重启、完全重启的区别
| 模式 | 说明 |
|---|---|
| 热重载(Hot Reload) | 不重启应用,可保留应用状态,但整个过程会重新运行入口文件内的逻辑 |
| 热重启(Hot Restart) | 会重启应用,不保留应用状态,支持更广泛的ArkTS代码修改快速生效。一旦执行了热重启,后续热重载流程均会被热重启取代 |
| 完全重启 | 完全重新运行应用,会重新全量编译代码和资源文件,较为耗时 |
说明:Hot Reload不支持卡片,不建议在hotReload模式下执行与卡片相关的操作。
二、使用限制
2.1 修改文件支持范围
| 修改文件 | 热重载 | 热重启 | 说明 |
|---|---|---|---|
| 修改Entry入口模块内ets、ts代码文件 | ✅ | ✅ | - |
| 修改Entry直接/间接依赖的Har模块内代码文件 | ✅ | ✅ | Har模块与Entry模块间无Hsp |
| 修改Entry直接/间接依赖的Hsp模块内代码文件 | ❌ | ❌ | - |
| 引入的其他工程Har模块内代码文件 | ✅ | ✅ | Har模块与Entry模块间无Hsp |
| 引入的其他工程Hsp模块内代码文件 | ❌ | ❌ | - |
| 修改worker线程文件 | ❌ | ❌ | - |
| 修改模块目录下Index文件 | ✅ | ✅ | - |
| 启动应用后新增的代码文件 | ❌ | ❌ | - |
| C++、so文件 | ❌ | ❌ | 可通过Apply Changes支持(API 24+) |
| resource资源文件 | ❌ | ❌ | 支持对资源引用的修改 |
2.2 主要代码元素支持范围
| 代码元素 | 热重载 | 热重启 | 说明 |
|---|---|---|---|
| UI代码(字号、颜色等) | ✅ | ✅ | - |
| UI响应事件(onClick等) | ✅ | ✅ | - |
| import(新增) | 部分 | 部分 | 不支持从启动应用时未加载的文件中import模块 |
| import(修改/删除) | ✅ | ✅ | - |
| 动态import/lazy import新增 | 6.1.0 Beta1开始部分支持 | 6.1.0 Beta1开始部分支持 | 不支持从启动应用时未加载的文件中import模块 |
| export(新增) | 部分 | 部分 | 新增export default时应同步在调用文件内新增对应import语句 |
| export(修改/删除) | ✅ | ✅ | - |
| 装饰器(@State、@Prop等) | 部分 | 部分 | @Entry修饰的文件支持@Styles新增/修改/删除 |
| Struct代码块(新增) | 部分 | ✅ | @Entry修饰的文件内不支持新增Struct代码块 |
| Struct代码块(修改) | 部分 | ✅ | @Entry修饰的文件不支持成员变量/成员函数热重载 |
| 类(新增/修改/继承) | 部分 | ✅ | @Entry修饰的文件内有限制 |
| 枚举(新增/修改) | 部分 | ✅ | @Entry修饰的文件内不支持新增枚举 |
| 匿名函数/Lambda/闭包函数 | ✅ | ✅ | - |
| 闭包变量(新增/删除) | 部分 | 部分 | 热重载仅支持顶层闭包变量 |
2.3 其他场景
| 场景 | 支持情况 |
|---|---|
| 命中断点时 | 不支持(需Resume Program继续执行后再操作) |
| 修改跳转的其他ability页面 | 热重载不支持,热重启支持 |
三、开启热重启/Apply Changes(可选)
点击菜单栏File → Settings(macOS为DevEco Studio → Preferences/Settings)→ Build, Execution, Deployment → Hot Reload,勾选以下选项:
| 选项 | 说明 |
|---|---|
| Enable hot restart | 开启热重启 |
| Enable Apply Changes | 开启Apply Changes(支持C++代码及资源文件增量调试,需设备API 24+) |
四、操作步骤
4.1 连接设备
连接真机设备或模拟器。
4.2 切换配置
在下拉菜单中,将运行/调试配置切换为Hot Reload的配置。
4.3 运行/调试应用
使用本地真机运行应用或使用模拟器运行应用。
4.4 触发Hot Reload
修改代码后,通过以下方式查看设备上修改后的显示效果:
| 方式 | 操作 |
|---|---|
| 方式一 | 点击Hot Reload按钮 |
| 方式二 | 设置Actions on Save勾选Perform hot reload,通过快捷键Ctrl + S触发 |
注意:方式二不支持Apply Changes,如需使用Apply Changes功能,请使用方式一。
4.5 控制台日志
热重载成功:
Performing hot reload...
Syncing files to device xxx
Reloaded 1 files in x s xxx ms.
热重启成功:
Performing hot restart...
$ hdc shell aa force-stop com.xx.xx
Syncing files to device xxx
Reloaded 1 files in x s xxx ms.
$ hdc shell aa start -a EntryAbility -b com.xxx.xxx in xxx ms
Apply Changes成功:
Performing Apply Changes...
$ hdc shell aa force-stop com.xx.xx
$ hdc file send xx xx in xx ms
FileTransfer finish, Size:xxxx, File count = xx, time:xxx ms rate:xxxx.xxkB/s
4.6 退出Hot Reload
点击停止按钮终止运行/调试运行,退出Hot Reload模式。
五、动态配置签名或应用版本号(可选)
从DevEco Studio 6.0.2 Beta1开始,可以在hvigorfile.ts中动态配置签名或应用版本号,避免每个开发者都需要本地修改。
-
签名配置:在hvigorfile.ts中配置签名信息,Hot Reload功能仍可正常使用
-
版本号配置:在hvigorfile.ts中动态配置应用版本号,Hot Reload功能仍可正常使用
更多推荐




所有评论(0)