用DevEco Studio增量补丁修复功能,让鸿蒙应用的调试效率大增
yund56 2025-08-02 23:29 3 浏览
在鸿蒙应用开发的快节奏赛道上,每一秒的开发效率提升都至关重要。如何更快地看到代码更改后的效果?如何尽可能缩短开发、调试和验证的周期?如何做到在某大厂180万行+项目中将代码修改即时生效?这些问题在DevEco Studio中得到了很好的解答,而增量补丁修复便是其中的核心特性之一。今天,我们要深入探讨鸿蒙应用增量补丁修复及其两个能够大幅加速开发进度的强大功能——Hot Reload和Apply Changes。它们就如同给你的开发旅程中加入了超级引擎,让你的代码更新效率大增。
增量补丁修复是代码修改快速生效的特性统称,包含增量补丁构建及补丁修复两个过程。顾名思义,增量补丁构建是在开发者修改代码后,仅对代码的修改部分进行增量产物构建并打成补丁包,而不是漫长的全量编译,这一过程能够节省开发者大量的时间。而补丁修复则是替换并更新运行时中对应方法或文件并重载到应用中,最后重新构建界面渲染树,根据生效场景不同,又可分为热修复和冷修复,热修复就是在补丁包完成修复后无需重启应用(ability)即可使修改生效,并可保持应用当前的运行状态,如变量、页面位置等,而冷修复则是需要重启应用(ability)才可使修改生效。是否需要重启主要取决于修改的方法或属性是否能够被重新刷新,即有些方法或属性的生命周期只会在启动应用时初始化,并在应用的整个生命周期中保持,如全局变量。
图1 增量补丁修复原理图
当前鸿蒙应用开发支持多种修改场景,包含ArkTS、TS、C++、SO、资源文件的修改,相应的增量补丁修复也分别针对不同的修改场景,产生了两种不同的增量补丁修复方式,分别为强力支持ArkTS开发的Hot Reload和支持能力更为广泛的Apply Changes。那么这两种补丁修复有哪些使用场景,又分别是何种原理?且听下文分解。
Hot Reload:ArkTS开发加速神器
ArkTS是HarmonyOS应用开发的官方高级语言,在鸿蒙应用的界面和交互开发上具有天生优势。而鸿蒙应用开发工具DevEco Studio中的Hot Reload特性则是针对ArkTS深度定制的开发效率提升能力,快速的增量补丁构建加无需重启即可使修改生效,使得Hot Reload定位为ArkTS开发加速神器。
使用Hot Reload十分的便捷,在IDE右上角选择热重载运行配置及入口模块后,运行项目并进行代码修改,点击Hot Reload按钮即可使修改生效。
图2 Hot Reload使用位置
除此之外,Hot Reload还能够与保存动作进行关联,修改后保存代码即可自动执行Hot Reload,能够非常大程度提升开发的流畅度。
图3 保存执行Hot Reload开关位置
Hot Reload有三大显著优势:及时反馈、保持应用状态、开发更流畅,下面将分别介绍这些优势。
及时反馈:在应用开发中,UI的频繁调整是家常便饭。无论是修改按钮的颜色、调整字体大小,还是重新布局组件,传统的开发方式通常需要重新运行工程才能看到效果。在万行级ArkTS代码项目中,Hot Reload修改生效速度能够比全量构建生效速度快70%以上,而在十万行级以上ArkTS代码项目中,Hot Reload修改生效速度能够比全量构建生效速度快50%以上(
数据来源于内部统计)。Hot Reload让这一切变得无比高效,无需频繁进行耗时长的重新运行工程,即刻就能看到逻辑、样式的更改效果,开发过程中的试错成本大幅降低。
图4 使用Hot Reload快速调整样式
保持应用状态:与完全重启应用不同,Hot Reload的技术理念是热修复,无需重启应用即可使代码修改生效,这就使得Hot Reload在大多数情况下会保留应用的运行状态,这对于演示和分享应用进展、调试需要复杂导航(如登录后操作)等场景尤为重要,避免了重新启动应用后手动恢复状态的麻烦。
图5 可保留应用状态查看修改效果
开发更流畅:通过开启保存自动执行Hot Reload,无需感知生效方式和过程,保存后自动快速看到修改效果,大幅减少了开发过程中的间断感。基于仅对修改代码的增量构建,你可以像在纸上快速涂改一样,迅速调整代码,马上看到效果,而不用每次都重新绘制整张纸,减少等待时间意味着更多的开发时间。开发者可以更高效地完成任务,将时间花在真正重要的事情上。
图6 Hot Reload支持对资源引用的修改
Hot Reload的原理从首次启动运行开始,DevEco Studio会在应用首次编译构建时生成增量所需的map文件,记录首次全量编译的相关信息,基于这个map文件,针对后续的修改,IDE能够识别修改的文件,调用方舟编译器只编译修改的文件,得到增量字节码文件,再打包通过HDC发送到设备,由包管理进行安装,虚拟机更新字节码,最后由ArkUI重建界面渲染树。
图7 Hot Reload流程概览图
几个实用小Tips分享给大家:
- 小步快跑:分解更改为小块,每次修改后使用Hot Reload查看效果。
- 结合状态管理:使用状态管理工具(如@State、@Prop)可以更好地控制状态,确保Hot Reload后状态的正确性。
- 定期重启应用:在长时间开发后,建议偶尔完全重启应用,以确保代码和状态的一致性。
虽然Hot Reload能够给ArkTS代码开发带来愉快的体验,但它也有一些局限性,主要体现在如下几个方面:
一是无法应用某些更改,为保留应用状态以及更快速的编译,Hot Reload存在以下不支持场景:
- import新增未使用过的文件;
- @Entry修饰的入口文件内struct成员函数、成员变量的新增、修改;
- @Entry修饰的入口文件内枚举键和值、接口对象的修改;
获取更详细的使用约束可见HotReload使用说明。
二是状态保留的局限,某些复杂场景下,应用的状态可能无法正确保留,尤其是当状态管理不当时。另外还有使用范围有限,Hot Reload仅支持ArkTS、TS代码的更改,对于C++、资源文件、SO文件的更改,可选择使用同样快速但是需要重启应用的Apply Changes或完全重启。
Apply Changes:神通广大的多面手
为满足其他语言、文件快速开发的需要,Apply Changes特性应运而生,相较于Hot Reload,Apply Changes同样针对修改的增量部分进行编译,具有快速生效的优点,但是为支持C++、资源、SO等复杂的加载场景,Apply Changes还会进行重启设备上应用的动作。即以牺牲应用状态保持为代价,获得更为广泛的支持能力,Apply Changes目前能够支持C++、SO、资源文件的修改,是当之无愧的多面手。
使用Apply Changes与使用Hot Reload类似,区别在于Apply Changes的按钮在普通运行配置下。
图8 Apply Changes使用位置
Apply Changes的显著优势也有三个,具体如下:
一是支持更多样的文件修改:
目前Apply Changes能够同时支持C++、SO、资源文件的一种或多种修改快速生效,且修改场景限制较小。
图9 Apply Changes支持C++代码修改生效
二是仅需一次推包,关闭应用后也可直接进行Apply Changes:
关于C++、SO以及资源文件的增量编译及打包都是与工程的运行状态解耦的,只要设备中已经安装工程对应的应用,那么无需运行工程,直接修改代码点击Apply Changes即可自动拉起应用,使修改生效,避免再一次全量构建。
图10 停止运行后无需再次运行,即可Apply Changes
三是稳定性更高:
由于Apply Changes能够重启应用,能够及时进行增量补丁的重新加载,避免了潜在的状态不一致问题,修复因状态污染可能导致的逻辑异常。
图11 Apply Changes支持资源文件修改生效
与Hot Reload类似,IDE在首次全量运行后会缓存部分信息用于后续差异比较,后续修改C++代码后,点击Apply Changes会基于缓存信息构建增量补丁包,具体而言是,启动SO的cmake流程构建SO,通过与缓存信息比较,识别出差异SO再构建增量包。构建完成后IDE会关闭设备上的应用,进行修复更新,结束后再重新拉起应用,完成代码生效。
图12 Apply Changes流程概览图
Apply Changes的几个实用小Tips也分享一下:
- 优先使用HotReload快速验证UI和ArkTS代码逻辑;
- 遇到复杂修改,及非ArkTS代码修改时再使用ApplyChanges;
- 定期通过全量运行确保应用整体稳定性;
同样Apply Changes也有局限性,主要体现在如下两个方面:
首先是应用的状态无法保留,Apply Changes采用冷修复的技术路线,会进行应用重启行为,因此无法对应用状态进行保留,如丢失输入内容、路由栈会被重置到初始页面。然后是暂时无法支持ArkTS、TS代码文件的修改,目前Apply Changes未能做到同时支持ArkTS、TS代码的增量编译,无法支持ArkTS、TS代码的修改生效。
在鸿蒙应用开发中,Hot Reload和Apply Changes各有侧重,Hot Reload能够快速调整UI及ArkTS代码逻辑,同时能够保留应用状态,具有快而轻的特点。而Apply Changes是针对非ArkTS代码的修复利器,具有全而稳的特点,能够进行复杂的修改,同时避免长时间运行可能产生的错误。根据需求灵活选择,才能进一步提升开发效率,尽快为用户提供更好的体验。
相关推荐
- 5套简约大气工作总结PPT模板,可直接套用,无门槛免费领取
-
日常工作中,经常需要制作PPT,自己设计耗时又耗力,很多时候我们会找模板。今天给大家分享5套简约大气工作总结PPT模板,可直接套用,无门槛免费领取。下面先预览一下这些模板吧,看看有没有自己喜欢的,领取...
- 家人们,全球精选Keynote, PPT模板免费下载
-
大家好呀,早上好!今天我要给大伙推荐一个超实用的资源,那就是我自个儿觉得特别棒的一个网站,里面有PPT模板,还有Word简历模板呢。这个网站主要分享的是一些从国外来的顶级优质的PPT、Key...
- PPT想要高大上?6大免费高清图片下载网站帮你大忙!
-
1、Pixabay网站和APP网站共有890000张图片、矢量文件和艺术插图,不需要翻墙,注册之后全部可以免费下载,可商用,选择“简体中文”语言,即可支持中文搜索,对搜索结果可以根据图像的种类、方向...
- 一个有情怀的免费PPT模板下载网站!免费!免费!免费!!!
-
优品PPT网址:http://www.ypppt.com/性质:全部免费下载;质量高简介:网站的开头就清晰地写明,这是一个高质量而且免费的PPT模板网站,推荐大家使用。下载:选中模板,点击「点击下载...
- 各种ppt模板可以在哪免费下载?这些方法快来试试
-
很多小伙伴平时都会在网上下载各种各样的PPT模板,以备不时之需,毕竟我们在日常学习以及工作的过程中都会接触到ppt,那么各种各样的ppt模板我们可以在哪些地方免费下载呢?今天小编就例举了一些方法,下面...
- 2024年,分享10个PPT免费神器工具,用了就知道有多牛!
-
龙年大吉,新的一年又开始了,大家是不是还没有进入工作状态,哈哈。还是跟往年一样,第一篇文章,跟大家分享一些设计工具,整理了10个不错的神器。1、MJAIGC火了以后,我们团队也在加紧学习,运用人工智能...
- 这29套欧美PPT完全免费,千万别错过
-
Hi,各位小伙伴们,早上好!小伙伴们,好久没有给大家分享免费模板了,你不是一直想要一些国外PPT吗?今天恰好有时间,就给大家分享一批国外极简风格PP模板,页数有的70多页,有的100多页,非常实用,总...
- 我发现,这些PPT图形真是不错,免费送你
-
Hi,小伙伴,大家晚上好,小编又来分享资源了。俗话说的好,资源在手工作不愁,今天我又收藏了一些实用的PPT图形素材,就将它们分享给大家吧,图形包含的种类太多,除了各种数据图形,还有标题,重点,分类,聚...
- 宝,我给你送免费下载PPT模板的网站来了
-
本文很短,放心食用。不知道是因为答辩的原因,还是打工人职场汇报,最近总是有小伙伴在问有没有免费的ppt模板,所以决定写一篇简短的文章来讲一下如何免费下载ppt模板。先甩几个网站,放心都是免费的,不收钱...
- 你一直在找的矢量小人的素材,这个网站一大把!赶紧偷偷私藏起来
-
Hi,我是秋小叶~正在学习PPT的你,一定对阿文这样漫画般的教程不会感到陌生。那是什么让阿文的教程如此生动有趣,让人看得如享受一般?今天就来揭秘!01戏精小绿人有这么一个向门口逃跑的小绿人,我赌...
- 这5款神仙级PPT插件,每一款都是宝藏,新手必备
-
一提到做PPT,很多人可能心里咯噔一下,感觉煎熬的日子又来了。坐在电脑前冥思苦想,看着空白的界面,脑子一篇空白,对于PPT的设计没想法没灵感,费尽心思做出来的PP,领导可能还要一改再改……难道,就没有...
- 别再冲会员套模板了,用AI免费做原生PPT
-
在职场中,制作精美的PPT往往是展示专业能力和提升工作效率的关键。然而,传统的PPT制作不仅耗时费力,还需要一定的设计技能。随着AI技术的发展,现在有了更高效、更智能的解决方案。本文将介绍如何利用AI...
- 不花一分钱,白嫖上万个素材,这四个日本网站简直是设计师的天堂
-
日本发生7.4级地震,多个公司都受到了影响。我今天早上一看手机,就刷到了这条新闻,吓得我赶紧去看了眼收藏夹!还好收藏的图标网站依然能进,并没有受到太大影响。既然说到了这儿,那我就把这几个日本图标网站分...
- 提高PPT效率的5个专用网站,阿里这款三维图标素材,免费下载!
-
工欲善其事必先利其器,一款好的工具往往能大幅度提高设计的效率和质量。那么,平时设计PPT时,大家有没有收藏一些好用的工具呢?今天跟大家分享收藏已久的9款工具,每个都好用,看一下。flaticon(图标...
- 优品PPT,一个有情怀的免费PPT模板下载网站
-
优品PPT是一个免费简报模板、背景、图表、素材和字体的网站,收录许多和PowerPoint简报投影片相关的资源,其中很多人可能会用到的就是各种类型的PPT简报模板,只要找到自己需要的模板稍作修改、加入...
- 一周热门
- 最近发表
- 标签列表
-
- filter函数js (37)
- filter函数excel用不了 (73)
- 商城开发 (40)
- 影视网站免费源码最新版 (57)
- 影视资源api接口 (46)
- 网站留言板代码大全 (56)
- java版软件下载 (52)
- java教材电子课本下载 (48)
- 0基础编程从什么开始学 (50)
- java是用来干嘛的 (51)
- it入门应该学什么 (55)
- java线上课程 (55)
- 学java的软件叫什么软件 (38)
- 程序开发软件有哪些 (53)
- 软件培训 (59)
- 机器人编程代码大全 (50)
- 少儿编程教程免费 (45)
- 新代系统编程教学 (61)
- 共创世界编程网站 (38)
- 亲测源码 (36)
- 三角函数积分公式表 (35)
- 函数的表示方法 (34)
- 表格乘法的公式怎么设置 (34)
- sumif函数的例子 (34)
- 图片素材 (36)