当前位置:   article > 正文

DevEco Hvigor高效编译,构建过程新秘籍

hvigor

作者:Lewei,华为终端BG编译构建技术专家

DevEco Hvigor是使用TypeScript语言开发的全新轻量化的任务调度工具,针对HarmonyOS应用提供了一系列编译构建任务,支持将HarmonyOS应用编译构建出对应的产物包。作为一款HarmonyOS应用编译构建任务流工具,DevEco Hvigor具备许多可以提升构建效率的特性,支持多产物差异化构建,也支持HarmonyOS应用可分可合等特性。可以称得上是"麻雀虽小五脏俱全"。

一、任务并行

DevEco Hvigor具备任务并行执行的能力。对于C++编译、ArkTS任务等耗时而没有依赖关系的任务,DevEco Hvigor可以使用不同的工作线程并行执行,提高构建效率。在多模块的中大型工程中,将带来可观的耗时节省。

在DevEco Studio中开启DevEco Hvigor的并行编译构建能力,需要在DevEco Studio中打开Settings - Build, Execution, Development - Build Tools - Hvigor选项,并勾选"Execute tasks in parallel mode"。

二、任务增量

HarmonyOS应用的编译构建流程是由任务组成的。DevEco Hvigor具备任务增量执行的能力,通过判断任务的输入与输出,对于输入与输出没有变化的任务,可以复用上次构建产物,从而跳过对应的任务,节省构建时间。在DevEco Studio中开启DevEco Hvigor的任务增量能力,需要在DevEco Studio中打开Settings - Build, Execution, Development - Build Tools - Hvigor选项,并勾选"Re-execute the task in incremental mode"。

三、常驻进程

DevEco Hvigor提供了常驻进程的功能机制。通过将进程常驻在内存中,一方面避免了Node进程重复启动、减少了加载js文件的耗时,另一方面可以复用构建过程中的增量缓存、减少增量缓存信息的读取与落盘操作。另外,启用DevEco Hvigor的常驻进程功能,还可以支持预览器的急速预览功能和调试的Hot reload功能。DevEco Hvigor通过对代码文件的监听,可以快速编译代码片段,急速更新预览画面和在设备上实时调试代码修改。

在DevEco Studio中开启DevEco Hvigor的常驻进程构建能力,需要在DevEco Studio中打开Settings - Build, Execution, Development - Build Tools - Hvigor选项,并勾选"Enable the Daemon for tasks"。

在命令行中,可以通过使用hvigorw命令行工具来查看常驻进程状态或关闭常驻进程。

  • 在工程目录下执行./hvigorw --status-daemon,可以查看所有常驻进程的状态。
  • 在工程目录下执行./hvigorw --stop-daemon,可以关闭当前工程对应的常驻进程。
  • 在工程目录下执行./hvigorw --stop-daemon-all,可以关闭当前运行的所有DevEco Hvigor常驻进程。

四、构建过程可视化

DevEco Hvigor会记录每次构建任务的日志信息,并通过可视化的图表界面进行展示。记录的信息包括任务执行的耗时与线程、ArkTS编译中的各环节的细分耗时情况等。开发者可以藉此分析构建过程中的耗时情况、进而改善构建效率。

在DevEco Studio中开启DevEco Hvigor的常驻进程构建能力,需要在DevEco Studio中打开Settings - Build, Execution, Development - Build Tools - Hvigor选项,并勾选"Enable the Daemon for tasks"。

随后,可以点击DevEco Studio下方的"Build Analyzer"标签页,查看构建过程中的日志信息和耗时情况。

五、差异化构建打包

通常情况下,应用厂商会根据不同的部署环境、不同的目标人群以及不同的运行环境等,将同一个应用定制为不同的版本。DevEco Hvigor支持差异化构建打包,在构建配置文件中将差异化部分显示配置出来,即可在编译构建过程中实现一个应用构建出不同的目标产物版本,从而实现源代码、资源文件等的高效复用。

通过配置Target,每个HAP包都可以定制功能和资源。在每个HAP模块的build-profile.json5中,可以配置该模块支持的Targets:

  1. {
  2. "apiType": 'stageMode',
  3. "buildOption": {
  4. },
  5. "targets": [ //定义不同的target
  6. {
  7. "name": "default", //默认target名称default
  8. "runtimeOS": "HarmonyOS",
  9. },
  10. {
  11. "name": "free", //免费版target名称
  12. "runtimeOS": "HarmonyOS"
  13. },
  14. {
  15. "name": "pay", //付费版target名称
  16. "runtimeOS": "HarmonyOS",
  17. }
  18. ]
  19. }

在每个target中,可以定制其页面源码集、资源目录、支持的设备类型等,比如当你只希望某个hap对应平板设备、而某个hap包对应手机配置时,可以如下配置:

  1. {
  2.   "apiType"'stageMode',
  3.   "buildOption": {
  4.   },
  5.   "targets": [
  6.     {
  7.       "name""default",
  8.       "runtimeOS""HarmonyOS",
  9.     },
  10.     {
  11.       "name""phone",
  12.       "runtimeOS""HarmonyOS",
  13.       "config": {
  14.         "deviceType": [  //定义free支持的设备类型为phone
  15.           "phone"
  16.         ]
  17.       }
  18.     },
  19.     {
  20.       "name""tablet",
  21.       "runtimeOS""HarmonyOS",
  22.       "config": {
  23.         "deviceType": [  //定义pay支持的设备类型为phone
  24.           "tablet"
  25.         ]
  26.       }
  27.     }
  28.   ]
  29. }

通过配置将哪些HAP模块的Target与Product绑定,让定制化的HAP可以组合成APP包、发布上架应用市场。在工程级的build-profile.json5中,先定义Product,并可以定制使用不同的bundleName和签名材料:

  1. "app": {
  2.     "signingConfigs": [],
  3.     "compileSdkVersion"9,
  4.     "compatibleSdkVersion"9,
  5.     "products": [
  6.       {
  7.         "name""default",
  8.         "bundleName""com.example00.com",  //定义default的bundleName信息
  9.         "signingConfig""default" //定义default的签名文件信息
  10.       },
  11.       {
  12.         "name""productA",
  13.         "bundleName""com.example01.com",  //定义productA的bundleName信息
  14.         "signingConfig""productA" //定义productA的签名文件信息
  15.       },
  16.       {
  17.         "name""productB",
  18.         "bundleName""com.example02.com",  //定义productB的bundleName信息
  19.         "signingConfig""productB" //定义productB的签名文件信息
  20.       }
  21.     ]
  22.   }

再定义需要将哪些HAP模块的Target与Product绑定,就可以在上架应用商店时提供不同的APP包。

  1. {
  2.   "app": {
  3.     "signingConfigs": [],
  4.     "compileSdkVersion"9,
  5.     "compatibleSdkVersion"9,
  6.     "products": [
  7.       {
  8.         "name""default",
  9.         "bundleName""com.example00.com",
  10.         "signingConfig""default"
  11.       },
  12.       {
  13.         "name""productA",
  14.         "bundleName""com.example01.com",
  15.         "signingConfig""productA"
  16.       },
  17.       {
  18.         "name""productB",
  19.         "bundleName""com.example02.com",
  20.         "signingConfig""productB"
  21.       }
  22.     ]
  23.   },
  24.   "modules": [
  25.     {
  26.       "name""entry",
  27.       "srcPath""./entry",
  28.       "targets": [
  29.         {
  30.           "name""default",  //default target分别打包到default、productA和productB APP中
  31.           "applyToProducts": [
  32.             "default",
  33.             "productA",
  34.             "productB"
  35.           ]
  36.         },
  37.         {
  38.           "name""free",  //free target打包到productA APP中
  39.           "applyToProducts": [
  40.             "productA"
  41.           ]
  42.         },
  43.         {
  44.           "name""pay",  //将pay target打包到productB APP中
  45.           "applyToProducts": [
  46.             "productB"
  47.           ]
  48.         }
  49.       ]
  50.     }
  51.   ]
  52. }

最后,在DevEco Studio中,可以使用可视化界面来选择运行和调试指定模块和Target。从DevEco Studio界面的右上角打开面板,执行需要调试或运行的Target,DevEco Hvigor就会执行指定模块、指定Target的编译构建,并在预览和调试中都使用该配置。

六、未来特性与总结

目前,DevEco Hvigor作为全新开发的编译构建工具,虽然已经有了不少可以提升编译效率的地方,但仍有许多新的特性、功能和性能优化还在路上。比如,DevEco Hvigor即将开放的自定义构建任务插件能力和编译流程插桩接口、在运行时获取构建配置的BuildProfile机制等。我们会继续努力,力求将更好的编译效率、更便捷的构建体验,带给每一位HarmonyOS应用的开发者。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/222169
推荐阅读
相关标签
  

闽ICP备14008679号