0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【技术视界】DevEco Hvigor高效编译,构建过程新秘籍

HarmonyOS开发者 来源:未知 2023-09-26 12:10 次阅读
# 技术视界# 【技术视界】栏目为开发者提供华为研发专家对于HarmonyOS关键技术的专业解读,从不同角度、不同方面帮助开发者更好更快地掌握HarmonyOS相关开发知识。本期文章为大家带来的是华为终端BG编译构建技术专家的分享,希望能为您的开发之路带来启发~ 作者:Lewei,华为终端BG编译构建技术专家

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

任务并行

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

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

wKgaomUroLKAAAToAAJmi5DP4MQ835.png

任务增量

HarmonyOS应用的编译构建流程是由任务组成的。DevEco Hvigor具备任务增量执行的能力,通过判断任务的输入与输出,对于输入与输出没有变化的任务,可以复用上次构建产物,从而跳过对应的任务,节省构建时间。

在DevEco Studio中开启DevEco Hvigor的任务增量能力,需要在DevEco Studio中打开Settings - Build,Execution, Development - Build Tools - Hvigor选项,并勾选"Re-execute the task in incremental mode"。

wKgaomUroLKAZOopAAJnJ_ZuaEc105.png

常驻进程

DevEco Hvigor提供了常驻进程的功能机制。通过将进程常驻在内存中,一方面避免了Node进程重复启动、减少了加载js文件的耗时,另一方面可以复用构建过程中的增量缓存、减少增量缓存信息的读取与落盘操作。

另外,启用DevEco Hvigor的常驻进程功能,还可以支持预览器的急速预览功能和调试的Hot reload功能。DevEco Hvigor通过对代码文件的监听,可以快速编译代码片段,急速更新预览画面和在设备上实时调试代码修改。

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

wKgaomUroLOARh4yAAJm20YrJAM748.png

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

  • 在工程目录下执行./hvigorw --status-daemon,可以查看所有常驻进程的状态。

  • 在工程目录下执行./hvigorw --stop-daemon,可以关闭当前工程对应的常驻进程。

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

构建过程可视化

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

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

wKgaomUroLOAMOMKAAJob4p0yIA793.png

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

wKgaomUroLSAGOcPAAGMpv-VDh8943.png

差异化构建打包

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

通过配置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的编译构建,并在预览和调试中都使用该配置。

wKgaomUroLSAKb6XAAJ5D1FyAoU784.png

未来特性与总结

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • HarmonyOS
    +关注

    关注

    79

    文章

    1974

    浏览量

    30176

原文标题:【技术视界】DevEco Hvigor高效编译,构建过程新秘籍

文章出处:【微信号:HarmonyOS_Dev,微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    鸿蒙Flutter实战:02-Windows环境搭建踩坑指南

    ,鸿蒙开发需要配置ohpm, hvigor及node C:\\\\Program Files\\\\Huawei\\\\DevEco Studio\\\\tools\\\\ohpm\\\\bin C
    发表于 10-22 15:05

    鸿蒙Flutter实战:01-搭建开发环境

    \\\\Huawei\\\\DevEco Studio\\\\tools\\\\hvigor\\\\bin C:\\\\Program Files\\\\Huawei\\\\DevEco
    发表于 10-21 19:35

    RT-Thread Studio构建和重新构建的不同,一般我们编译工程时用哪个?

    想请教在RT-Thread Studio中,构建和重新构建的不同,一般我们编译工程时用哪个,谢谢!
    发表于 07-25 07:38

    AI编译技术剖析

    随着人工智能技术的飞速发展,AI编译器作为一种新兴的编译技术逐渐进入人们的视野。AI编译器不仅具备传统
    的头像 发表于 07-17 18:28 1634次阅读

    鸿蒙OpenHarmony开发:【编译构建指导】

    OpenHarmony编译子系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能
    的头像 发表于 05-13 09:31 1793次阅读
    鸿蒙OpenHarmony开发:【<b class='flag-5'>编译</b><b class='flag-5'>构建</b>指导】

    鸿蒙OpenHarmony【标准系统编译】 (基于RK3568开发板)

    DevEco Device Tool支持Rockchip RK3568开发板的源码一键编译功能,提供编译工具链和编译环境依赖的检测及一键安装,简化复杂
    的头像 发表于 04-24 20:55 1297次阅读
    鸿蒙OpenHarmony【标准系统<b class='flag-5'>编译</b>】 (基于RK3568开发板)

    鸿蒙OpenHarmony【小型系统编译】 (基于Hi3516开发板)

    DevEco Device Tool支持Hi3516DV300开发板的源码一键编译功能,提供编译工具链和编译环境依赖的检测及一键安装,简化复杂编译
    的头像 发表于 04-23 15:53 522次阅读
    鸿蒙OpenHarmony【小型系统<b class='flag-5'>编译</b>】 (基于Hi3516开发板)

    鸿蒙OpenHarmony【轻量系统编译】 (基于Hi3861开发板)

    DevEco Device Tool支持Hi3861V100开发板的源码一键编译功能,提供编译工具链和编译环境依赖的检测及一键安装,简化复杂编译
    的头像 发表于 04-22 15:19 566次阅读
    鸿蒙OpenHarmony【轻量系统<b class='flag-5'>编译</b>】 (基于Hi3861开发板)

    交换芯片的构建过程

    交换芯片的构建过程是一个复杂而精细的技术活动,它涉及多个模块的设计和集成。这一过程不仅要求工程师们对芯片的结构和功能有深入的理解,还需要他们具备高超的
    的头像 发表于 03-22 16:21 839次阅读

    鸿蒙开发【编译构建】讲解

    编译构建是将应用/服务的源代码、资源、第三方库等,通过编译工具转换为可直接在硬件设备上运行的二进制机器码,然后再将二进制机器码封装为HAP/APP软件包,并为HAP/APP包进行签名的过程
    发表于 02-27 17:41

    鸿蒙DevEco Service开发准备与使用

    DevEco低代码是一个基于Serverless和ArkUI的端云一体化低代码开发平台,可通过拖拽式开发,可视化配置构建元服务。打通HarmonyOS云侧与端侧能力,轻松实现HMS Core和AGC
    发表于 02-23 15:40

    OpenHarmony 移植:build lite 编译构建过程

    这些疑惑,会对 build lite 编译构建过程有个更深入的理解。 1、产品解决方案代码是如何被调用编译的 在文件 buildliteBUILD.gn 配置文件中的
    的头像 发表于 02-19 16:19 958次阅读

    DevEco Studio 4.1带来多种调试能力,助力鸿蒙原生应用开发高效调试

    ,HUAWEI DevEco Studio不断挖掘、汲取开发者的需求和建议,经过持续打磨和系列升级实现新突破,将全力支持鸿蒙原生应用开发。 为助力高效开发,快速定位问题,DevEco Studio 4.1带来多种
    的头像 发表于 02-04 15:35 742次阅读

    鸿蒙南向开发—OpenHarmony技术编译构建框架

    概述 OpenHarmony编译子系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能: 以部件为最小
    发表于 01-04 16:47

    如何构建linux开发环境和编译软件工程、应用程序

    前文介绍了如何使用官方提供的镜像文件启动开发板,本文将说明如何构建linux开发环境和编译软件工程、应用程序。
    的头像 发表于 01-03 12:31 2056次阅读
    如何<b class='flag-5'>构建</b>linux开发环境和<b class='flag-5'>编译</b>软件工程、应用程序