目录

1 -> 前言

2 -> 使用约束

3 -> 创建模块

4 -> 构建HAR

4.1 -> 以debug模式构建HAR

4.2 -> 以release模式构建HAR

4.3 -> 构建字节码格式的HAR

4.4 -> 对HAR进行签名


1 -> 前言

构建模式:DevEco Studio默认提供debug和release两种构建模式,同时支持开发者自定义构建模式。

产物格式:构建出的HAR包产物分为包含源码的HAR、包含js中间码的HAR以及包含字节码的HAR三种产物格式。

debug构建模式时,从DevEco Studio NEXT Beta1(5.0.3.800)版本开始,默认产物是字节码HAR,用于开发者进行本地调测,可提升编译构建效率;同时支持构建包含源码的HAR。

release构建模式时,从DevEco Studio NEXT Developer Beta3(5.0.3.600)版本开始,默认不开启混淆,构建产物和debug模式相同;开启混淆后,构建产物是包含js中间码的HAR,用于发布到ohpm中心仓;同时支持配置产物格式为字节码HAR,用于提升发布产物的安全性。

2 -> 使用约束

  • HAR包不支持在module.json5中配置extension组件。
  • HAR包不支持pages路由配置。
  • HAR自身的构建不建议引用本地模块,可能导致其他模块依赖该HAR包时安装失败,如果安装失败,需要在工程级oh-package.json5中配置overrides。
  • 以release模式构建HAR时,对ArkTS代码的混淆仅支持API 10及以上的Stage模型。
  • 引用字节码Har包时,当字节码Har包的API版本高于工程的compatibleSDKVersion时,不可用。
  • 字节码Har包和Hap工程的compatibleSDKVersion均为API 12时,当字节码Har包的compatibleSdkVersionStage高于Hap工程的compatibleSdkVersionStage时,不可用。

3 -> 创建模块

1. 新建工程时选择API 10及以上的Stage模型,工程创建完成后,新建“Static Library”模块。

2. 编写代码。

  library  // HAR根目录
  ├─libs  // 存放用户自定义引用的Native库,一般为.so文件
  └─src
  │   └─main
  │     ├─cpp
  │     │  ├─types  // 定义Native API对外暴露的接口  
  │     │  │  └─liblibrary  
  │     │  │      ├─index.d.ts
  │     │  │      └─oh-package.json5 
  │     │  ├─CMakeLists.txt  // CMake配置文件  
  │     │  └─napi_init.cpp  // C++源码文件
  │     └─ets  // ArkTS源码目录
  │     │  └─components
  │     │     └─MainPage.ets
  │     ├─resources  // 资源目录,用于存放资源文件,如图片、多媒体、字符串等  
  │     └─module.json5  // 模块配置文件,包含当前HAR的配置信息  
  ├─build-profile.json5  // Hvigor编译构建所需的配置文件,包含编译选项
  ├─hvigorfile.ts  // Hvigor构建脚本文件,包含构建当前模块的插件、自定义任务等
  ├─Index.ets  // HAR的入口文件,一般作为出口定义HAR对外提供的函数、组件等   
  └─oh-package.json5  // HAR的描述文件,定义HAR的基本信息、依赖项等

3. 在oh-package.json5中“main”字段定义导出文件入口。若不设置“main”字段,默认以当前目录下Index.ets为入口文件,依据.ets>.ts>.js的顺序依次检索。以将ets/components/MainPage.ets文件设置为入口文件为例:

{..."main": "./src/main/ets/components/MainPage.ets",...
}

4 -> 构建HAR

4.1 -> 以debug模式构建HAR

产物是包含源码的HAR包,其中包含源码、资源文件以及配置文件等,方便开发者进行本地调测,不包含build、node_modules、oh_modules、.cxx、.previewer、.hvigor、.gitignore、.ohpmignore、.gitignore/.ohpmignore中配置的文件、cpp工程的CMakeLists.txt。

说明

  • 如果是native工程,以debug模式构建的native产物中不包含调试信息和符号表,如需调试,请参考三方源码调试。
  • 从5.0.3.403版本开始,不再建议使用相对路径跨模块引用代码文件,若历史工程存在此场景的跨模块引用,会出现warning告警,请尝试将该文件移至本模块内,再重新进行编译。
  • 从5.0.3.403版本开始,以debug/release模式构建HAR的流程使用相同的语法校验规则,若历史工程出现ArkTS语法报错,请按照报错信息修改代码,以符合ArkTS语言规范。

1. 将工程级build-profile.json5中的useNormalizedOHMUrl字段设置为false。

说明

使用DevEco Studio NEXT Beta1(5.0.3.800)之前的版本,工程级build-profile.json5的useNormalizedOHMUrl字段默认值为false,无需执行本步骤。

{"app": {"products": [{"buildOption": {"strictMode": {"useNormalizedOHMUrl": false}}}]}
}

2. 点击DevEco Studio右上角图标

Build Mode选择debug。默认为<Default>模式:在编译App时使用release模式,编译HAP/HSP/HAR时使用debug模式。

3. 若部分工程源文件无需构建到HAR包中,可在module目录下新建.ohpmignore文件,配置打包时要忽略的文件,支持正则表达式写法。将无需打包进HAR包的文件/文件夹名称写入.ohpmignore文件中。DevEco Studio构建时将过滤掉.ohpmignore文件中所包含的文件/文件夹。

4. 选中HAR模块的根目录,点击Build > Make Module '<module-name>'启动构建。

构建完成后,build目录下生成HAR包产物。

HAR包产物解压后,结构如下:

4.2 -> 以release模式构建HAR

从DevEco Studio NEXT Developer Beta3(5.0.3.600)版本开始,默认不开启混淆,构建产物和debug模式相同,请参考​​​​​​​以debug模式构建HAR。

开启混淆后,构建产物是包含js中间码的HAR包,其中包含源码混淆后生成的js中间码文件、资源文件、配置文件、readme、changelog声明文件、license证书文件,用于发布到ohpm中心仓。

1. 点击DevEco Studio右上角图标

Build Mode中选择release。默认为<Default>模式:在编译App时使用release模式,编译HAP/HSP/HAR时使用debug模式。

在​​​​​​​编译模式为release时,为保护代码资产,建议开启混淆,在模块级build-profile.json5文件的release的buildOptionSet配置中,将obfuscation/ruleOptions下的enable字段设置为true。

{"apiType": "stageMode","buildOption": {},"buildOptionSet": [{"name": "release","arkOptions": {// 混淆相关参数"obfuscation": {"ruleOptions": {// true表示进行混淆,false表示不进行混淆。5.0.3.600及以上版本默认为false"enable": true,// 混淆规则文件"files": ["./obfuscation-rules.txt"]},// consumerFiles中指定的混淆配置文件会在构建依赖这个library的工程或library时被应用"consumerFiles": ["./consumer-rules.txt"]}},},],"targets": [{"name": "default"}]
}

3. 将工程级build-profile.json5中的useNormalizedOHMUrl字段设置为false。

说明

使用DevEco Studio NEXT Beta1(5.0.3.800)之前的版本,工程级build-profile.json5的useNormalizedOHMUrl字段默认值为false,无需执行本步骤。

{"app": {"products": [{"buildOption": {"strictMode": {"useNormalizedOHMUrl": false}}}]}
}

4. 选中HAR模块的根目录,点击Build > Make Module '<module-name>'启动构建。

构建完成后,build目录下生成HAR包产物。

HAR包产物解压后,结构如下:

4.3 -> 构建字节码格式的HAR

默认产物是包含字节码的HAR包,其中包含abc字节码、资源文件、配置文件、readme、changelog声明文件、license证书文件,提升发布到ohpm中心仓产物的安全性。

由于字节码HAR包中包含的是编译后的abc字节码,因此当字节码HAR被其他应用模块(HAP/HSP)依赖时,在执行应用模块的编译构建时,不需要再对依赖的HAR中的代码进行语法检查和编译等操作,相比包含源码的HAR和包含js中间码的HAR,可以有效提升应用模块的编译构建效率。

说明

  • 由于构建字节码HAR需要生成二进制的格式,所以单独构建字节码HAR会比构建非字节码HAR耗时更多。
  • 当字节码HAR被集成使用时,那么该工程的build-profile.json5中的useNormalizedOHMUrl必须设置为true。
  • 如果字节码HAR未开启混淆,则后续字节码HAR被集成使用时,将不会再对HAR包进行混淆。
  • 字节码HAR使用的依赖需要配置在本模块的oh-package.json5的dependencies或dynamicDependencies中,如果不配置,后续字节码HAR被集成时会出现运行时异常。
  • 支持使用不同构建模式进行构建,与构建HAP/HSP相同。

1. 将工程级build-profile.json5的useNormalizedOHMUrl设置为true。

说明

从DevEco Studio NEXT Beta1(5.0.3.800)版本开始,工程级build-profile.json5中useNormalizedOHMUrl字段默认为true,byteCodeHar缺省默认值为true,无需执行步骤1和2。

{"app": {"products": [{"buildOption": {"strictMode": {"useNormalizedOHMUrl": true}}}]}
}

2. 在HAR模块的build-profile.json5中,将byteCodeHar设置为true。

{"buildOption": {"arkOptions": {"byteCodeHar": true}}
}

3. 选中HAR模块的根目录,点击Build > Make Module '<module-name>'启动构建。

构建完成后,build目录下生成HAR包产物。

HAR包产物解压后,结构如下:

4.4 -> 对HAR进行签名

DevEco Studio在构建HAR流程的基础上,支持对HAR进行签名。签名后的HAR包后续可用于接入生态市场。

说明

1. 该能力只在Compatible SDK 5.0.0(12)及以上版本的SDK中支持。

2. 该能力需开启Hvigor的Daemon能力,请确保当前工程开启了Daemon,打开Settings > Build,Execution,Deployment > Build Tools > Hvigor,勾选字段Enable the Daemon for tasks。

    1. 在hvigor-config.json5中,开启构建签名HAR开关:

    {"properties": {"ohos.sign.har": true}
    }

    2. 配置工程签名信息,配置流程请参考​​​​​​​配置签名信息。

    3. 选中HAR模块的根目录,点击Build > Make Module '<module-name>'启动构建。

    构建完成后,build目录下生成签名HAR包产物。


    感谢各位大佬支持!!!

    互三啦!!!

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如若转载,请注明出处:http://www.pswp.cn/diannao/94555.shtml
    繁体地址,请注明出处:http://hk.pswp.cn/diannao/94555.shtml
    英文地址,请注明出处:http://en.pswp.cn/diannao/94555.shtml

    如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    93、【OS】【Nuttx】【构建】cmake menuconfig 目标

    【声明】本博客所有内容均为个人业余时间创作&#xff0c;所述技术案例均来自公开开源项目&#xff08;如Github&#xff0c;Apache基金会&#xff09;&#xff0c;不涉及任何企业机密或未公开技术&#xff0c;如有侵权请联系删除 背景 接之前 blog 【OS】【Nuttx】【构建】cm…

    React 表单处理:移动端输入场景下的卡顿问题与防抖优化方案

    文章目录每日一句正能量前言一、问题场景与表现二、技术攻坚过程三、优化效果与经验沉淀每日一句正能量 山再高&#xff0c;往上攀&#xff0c;总能登顶&#xff1b;路再长&#xff0c;走下去&#xff0c;终将到达。每日一励&#xff0c;勇往直前。 前言 在移动端 React 项目开…

    数据安全防护所需要的关键要素

    数据安全防护是一个覆盖数据全生命周期&#xff08;采集、存储、传输、处理、销毁&#xff09;、融合技术、管理、流程与人员的系统性工程。其核心目标是保障数据的​​保密性&#xff08;Confidentiality&#xff09;、完整性&#xff08;Integrity&#xff09;、可用性&#…

    【JavaEE】(8) 网络原理 HTTP/HTTPS

    一、什么是 HTTP 协议 上节说到&#xff0c;应用层的协议需要约定通信的内容和数据格式。我们可以自定义应用层协议&#xff0c;也可以基于现成的应用层协议进行开发。协议的种类很多&#xff0c;最常见的之一就是 HTTP&#xff0c;广泛用于网站和手机 App。准确来说&#xff0…

    C语言的数组与字符串练习题4

    C语言的数组与字符串练习题4 16. 数组元素去重 题目描述: 编写一个C程序,输入一组整数存储在数组中,去除数组中的重复元素,并输出去重后的数组。 解题思路: 遍历数组,对于每个元素,检查它之前是否已经存在相同的元素。如果不存在,则将其保留;否则,跳过。可以使用一…

    Transformers简单介绍 - 来源于huggingface

    Transformers介绍 - 来源于huggingface 文章目录Transformers介绍 - 来源于huggingfaceTransformers能做什么pipeline()函数零样本分类推理API完形填空命名实体识别问答摘要提取翻译transformers是如何工作的transformers的具体组成注意力层机制transformers原始结构architectu…

    template<typename R = void> 意义

    在 C 中&#xff0c;template<typename R void> 表示定义一个模板参数 R&#xff0c;其默认类型为 void。这意味着&#xff1a;如果用户没有显式指定 R&#xff0c;则 R 默认为 void。如果用户显式指定了 R&#xff08;如 template<typename R void> 后面跟着 &l…

    国产3D大型装配设计新突破①:图纸打开设计双加速 | 中望3D 2026

    本文为CAD芯智库整理&#xff0c;未经允许请勿复制、转载&#xff01;在中望3D 2026的新版中&#xff0c;不仅在设计效率上进行了重大优化&#xff0c;更是在装配方面实现了突破性的改进&#xff0c;让每一个项目都能快速、精确地从概念变为现实。 中望3D2026亮点速递装配篇将…

    游戏开发状态机与行为树的优缺点

    在游戏开发中&#xff0c;状态机&#xff08;Finite State Machine, FSM&#xff09; 和行为树&#xff08;Behavior Tree, BT&#xff09; 是两种常用的 AI 逻辑控制框架&#xff0c;分别适用于不同场景&#xff0c;其优缺点对比可从灵活性、维护成本、适用场景等多个维度分析…

    Linux下ELF文件的介绍

    目录 1.温故知新 2.ELF文件介绍 3.ELF文件组成 4.ELF文件形成到加载 5.连接过程 1.温故知新 上一篇博客&#xff0c;我们介绍了我们的动静态&#xff0c;知道了我们的库其实也是文件&#xff0c;如果我们想写一个库也是可以的&#xff0c;我们的把我们的库文件编译成.o文件…

    人工智能领域、图欧科技、IMYAI智能助手2025年6月更新月报

    2025年6月AI领域重要模型更新与平台优化汇总 摘要&#xff1a; 本文汇总了2025年6月期间AI领域发布的多项重要模型更新及平台功能优化信息&#xff0c;涵盖Google Gemini、阿里通义万相、字节豆包、百度文心一言、MiniMax海螺02、Google Veo3、快手可灵2.1、FLUX Kontext等模型…

    从零开始学Express,理解服务器,路由于中间件

    当我们初学前端时&#xff0c;常常只关注页面效果和交互&#xff0c;但随着项目复杂度提升&#xff0c;我们迟早会遇到“服务端”的问题&#xff1a;如何让一个页面的数据是从数据库来的&#xff1f;怎么让不同的用户看到不同的内容&#xff1f;这时候&#xff0c;我们就需要一…

    Codeforces Round 987 (Div. 2)

    ABC 略D预处理出每个位置的前缀最大和后缀最小。从后向前枚举&#xff0c;如果一个数无法后移&#xff0c;那么答案就是最大前缀&#xff0c;否则答案要不是前缀最大&#xff0c;要不就是这个数先移到前缀最大位置再移到能移到的最大的位置此处的答案。用线段树维护#include<…

    Javascript/ES6+/Typescript重点内容篇——手撕(待总结)

    前端核心知识点梳理与面试题详解 1. Promise 核心知识点 Promise 是异步编程的解决方案&#xff0c;用于处理异步操作三种状态&#xff1a;pending&#xff08;进行中&#xff09;、fulfilled&#xff08;已成功&#xff09;、rejected&#xff08;已失败&#xff09;状态一旦改…

    [自动化Adapt] 父子事件| 冗余过滤 | SQLite | SQLAlchemy | 会话工厂 | Alembic

    第五章&#xff1a;事件处理与融合 欢迎回到OpenAdapt探索之旅~ 在第四章&#xff1a;系统配置中&#xff0c;我们掌握了如何定制化系统参数。更早的第一章&#xff1a;录制引擎则展示了系统如何捕获海量原始操作数据。 假设我们需要训练机器人输入"hello"一词。原…

    组合期权:跨式策略

    文章目录0.简介1.买入跨式组合&#xff08;Long Straddle&#xff09;1.1 适用场景​1.2 合约选择1.3 损益分析1.4 案例示范2.卖出跨式组合&#xff08;Short Straddle&#xff09;2.1 适用场景​2.2 合约选择2.3 损益分析2.4 案例示范3.小结参考文献0.简介 跨式策略是一种交易…

    Vue计算属性详解2

    可写计算属性 计算属性默认是只读的,但在特殊场景下,我们可以创建"可写"的计算属性,通过同时提供getter和setter实现: <script setup>import { ref, computed } from vueconst firstName = ref(John)const lastName = ref(Doe)const fullName = computed(…

    UniStorm 5.3.0 + Unity2022 + URP配置说明

    一、前言 以前我用的是UniStorm3.0&#xff0c;主要用在内置管线里面&#xff0c;最近想在URP管线里面使用UniStorm天气系统&#xff0c;于是弄了UniStorm5.3.0的包&#xff0c;在Unity2022.3的URP模式下配置&#xff0c;直接导入package&#xff0c;两次宣告失败。最后看了官方…

    力扣经典算法篇-44-组合总和(回溯问题)

    1、题干 给你一个无重复元素的整数数组candidates和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选取 。…

    矩阵与高斯消元:数学算法在计算机领域的应用

    一、概述和基本概念 矩阵&#xff0c;类似于在 C 中我们看到的二维数组。它有两个维度&#xff0c;行和列。下面是一个典型的矩阵&#xff1a; M[12342345445610111213] M \begin{bmatrix} 1 & 2 & 3 & 4 \\ 2 & 3 & 4 & 5 \\ 4 & 4 & 5 &…