首页 > 其他分享 >DevEco Hvigor高效编译,构建过程新秘籍

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

时间:2023-10-13 09:33:21浏览次数:31  
标签:name DevEco 秘籍 default 编译 构建 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:

 

{
  "apiType": 'stageMode',
  "buildOption": {  
  },
  "targets": [  //定义不同的target
    {
      "name": "default",  //默认target名称default
      "runtimeOS": "HarmonyOS",
    },
    {
      "name": "free",  //免费版target名称
      "runtimeOS": "HarmonyOS"
    },
    {
      "name": "pay",  //付费版target名称
      "runtimeOS": "HarmonyOS",
    }
  ]
}

  

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

 

 

{
  "apiType": 'stageMode',
  "buildOption": {
  },
  "targets": [
    {
      "name": "default",
      "runtimeOS": "HarmonyOS",
    },
    {
      "name": "phone",
      "runtimeOS": "HarmonyOS",
      "config": {
        "deviceType": [  //定义free支持的设备类型为phone
          "phone"
        ]
      }
    },
    {
      "name": "tablet",
      "runtimeOS": "HarmonyOS",
      "config": {
        "deviceType": [  //定义pay支持的设备类型为phone
          "tablet"
        ]
      }
    }
  ]
}

 

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

"app": {
    "signingConfigs": [],
    "compileSdkVersion": 9,
    "compatibleSdkVersion": 9,
    "products": [
      {
        "name": "default",
        "bundleName": "com.example00.com",  //定义default的bundleName信息
        "signingConfig": "default" //定义default的签名文件信息
      },
      {
        "name": "productA",
        "bundleName": "com.example01.com",  //定义productA的bundleName信息
        "signingConfig": "productA" //定义productA的签名文件信息
      },
      {
        "name": "productB",
        "bundleName": "com.example02.com",  //定义productB的bundleName信息
        "signingConfig": "productB" //定义productB的签名文件信息
      }
    ]
  }

  

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

 

{
  "app": {
    "signingConfigs": [],
    "compileSdkVersion": 9,
    "compatibleSdkVersion": 9,
    "products": [
      {
        "name": "default",
        "bundleName": "com.example00.com",
        "signingConfig": "default"
      },
      {
        "name": "productA",
        "bundleName": "com.example01.com",
        "signingConfig": "productA"
      },
      {
        "name": "productB",
        "bundleName": "com.example02.com",
        "signingConfig": "productB"
      }
    ]
  },
  "modules": [
    {
      "name": "entry",
      "srcPath": "./entry",
      "targets": [
        {
          "name": "default",  //将default target分别打包到default、productA和productB APP中
          "applyToProducts": [
            "default",
            "productA",
            "productB"
          ]
        },
        {
          "name": "free",  //将free target打包到productA APP中
          "applyToProducts": [
            "productA"
          ]
        },
        {
          "name": "pay",  //将pay target打包到productB APP中
          "applyToProducts": [
            "productB"
          ]
        }
      ]
    }
  ]
}

 

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

六、未来特性与总结

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

标签:name,DevEco,秘籍,default,编译,构建,Hvigor
From: https://www.cnblogs.com/HarmonyOSDev/p/17761149.html

相关文章

  • 鸿蒙DevEco studio的安装(随笔)
    首先就是按照官方文档正常安装但是我在在安装界面出现这个错误execute'ohpminstall'failed.而我在文档中没有找到解决办法,最后在一个博客里的解决办法就是重新安装(博客地址:https://www.cnblogs.com/mayism123/p/17636872.html)而重新安装的时候参考官方文档:https://develo......
  • 157_《PPT修炼秘籍》其一:找图
    这是一篇原发布于2020-01-2217:55:00得益小站的文章,备份在此处。前言powerpoint可谓是我们最常用的办公工具了,大到公司演讲,小到学校班会;作报告,做演讲,无论是谁应该都会做一点。可为什么你和大牛的差距就那么大?今天我们就来一同学习下PPT的修炼秘籍。百度?世上图片千千万,你却偏......
  • 【原创】2-快速记忆秘籍-记忆的另一种分类及规律
    大家好,我又来给大家讲课了,从今天起我会不定期给大家由浅入深讲解下记忆的修炼过程,让大家对自己“肩膀上的圆球”有一个本质的认识。在学习完全部的过程后,你也会发现,原来自己的记忆怎么这么好,是的,其实每个人天生都是最强大脑!l  记忆的另一种分类结合上篇文章,实际上已经把记忆......
  • 【原创】4-快速记忆秘籍-记忆内容的分类
    大家好,我又来给大家讲课了,从今天起我会不定期给大家由浅入深讲解下记忆的修炼过程,让大家对自己“肩膀上的圆球”有一个本质的认识。在学习完全部的过程后,你也会发现,原来自己的记忆怎么这么好,是的,其实每个人天生都是最强大脑!记忆,记忆,到底我们需要记忆什么东西?结合我们的日常经念,......
  • 脱发秘籍:前端Chrome调试技巧汇总
     脱发秘籍:前端Chrome调试技巧汇总  Chrome浏览器调试工具的核心功能:......
  • 【技术视界】鸿蒙开发套件之DevEco Profiler助您轻松分析应用性能问题
     作者:shizhengtao,华为性能调优工具专家应用的性能优化一直以来都是开发者所面临的一大难题,在2023HDC大会上全新亮相的HarmonyOS NEXT开发者预览版,其中鸿蒙开发套件DevEco Profiler,对应用卡顿这一问题的定位解决又提供了哪些能力呢?本文带你一探究竟。一、Realtime Monitor,......
  • HarmonyOS/OpenHarmony应用开发-DevEco Studio新建项目的整体说明
    一、文件-新建-新建项目二、传统应用形态与IDE自带的模板可供选用与免安装的元服与IDE中自带模板的选择三、以元服务,远程模拟器为例说明IDE整体结构1区是工程目录结构,是最基本的配置与开发路径等的认知。2区是代码开发与修改区,是开发者主要的工作区域。3.是效果展示区,包括远程模拟......
  • 【技术视界】鸿蒙开发套件之DevEco Profiler助您轻松分析应用性能问题
    作者:shizhengtao,华为性能调优工具专家应用的性能优化一直以来都是开发者所面临的一大难题,在2023HDC大会上全新亮相的HarmonyOS NEXT开发者预览版,其中鸿蒙开发套件DevEco Profiler,对应用卡顿这一问题的定位解决又提供了哪些能力呢?本文带你一探究竟。一Realtime Monitor,高效发现卡......
  • HarmonyOS/OpenHarmony应用开发-DevEco Studio帮助快速入门的使用
    DevEcoStudio内置有帮助中心,初学HarmonyOS及OpenHarmony应用、元服务的开发者,通过内置的帮助中去系统的学习相关内容,是边练边学,快速上手的最佳方式。一、帮助二、快速开始三、HarmonyOS应用、元服务开发相关四、OpenHarmony应用、元服开发相关五、更多的常用基础知识与技巧了解学......
  • 【Android 开发】金九银十斩获offer秘籍:简历优化+Android大厂面试真题
    前言面试是一场没有硝烟的战争,这句话看有点危言耸听,但是在面试中考验的确无处不在。金九银十已经开始一个星期了,在面试或准备面试的小伙伴如果你在面试中对面试官所问的问题感到有困难时,那说明是我们的基础功没打好,或者是对面试题了解的还不够多。如果是连面试邀约都没有的小伙伴,咱......