【HarmonyOS NEXT】har 包的构建生成过程
Har模块文件结构

构建HAR
打包规则
- 开源HAR除了默认不需要打包的文件(build、node_modules、oh_modules、.cxx、.previewer、.hvigor、.gitignore、.ohpmignore)和.gitignore/.ohpmignore中配置的文件,cpp工程的CMakeLists.txt,buildProfile.json5文件中配置的混淆相关文件,其余文件都会被打进HAR包中。
- 闭源HAR只会将特定的文件(资源文件、配置文件、编译过程中使用的ets文件、readme和changelog等声明文件、license等证书文件)打包HAR包中。
构建开源HAR
1. 修改新建HAR模块时生成的build-profile.json5默认模板,将obfuscation下的enable字段改为false或删除整个obfuscation配置参数。
{"apiType": "stageMode","buildOption": {},"buildOptionSet": [{"name": "release","arkOptions": {// 开源har相关参数"obfuscation": {"ruleOptions": {// true表示进行混淆,false表示不进行混淆。默认为true"enable": false,]},// consumerFiles中指定的混淆配置文件会在构建依赖这个library的工程或library时被应用"consumerFiles": ["./consumer-rules.txt"]}},},],"targets": [{"name": "default"}]
}
2. 对于开源har,若部分工程源文件无需构建到HAR包中,可在module目录下新建.ohpmignore文件,配置打包时要忽略的文件,支持正则表达式写法。将无需打包进HAR包的文件/文件夹名称写入.ohpmignore文件中。DevEco Studio构建时将过滤掉.ohpmignore文件中所包含的文件/文件夹。

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

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

构建闭源HAR
DevEco Studio支持闭源HAR构建,通过对代码进行编译混淆,生成闭源HAR。在不共享源码的情况下,通过闭源HAR对外提供组件、资源等,可以实现多个模块或者多个工程共享组件、资源等。
1. 新建的HAR模块在编译模式为release模式时默认为构建闭源HAR,即build-profile.json5文件中obfuscation下的enable字段为true。
{"apiType": "stageMode","buildOption": {},"buildOptionSet": [{"name": "release","arkOptions": {// 闭源har相关参数"obfuscation": {"ruleOptions": {// true表示进行混淆,false表示不进行混淆。默认为true"enable": true,// 混淆规则文件"files": ["./obfuscation-rules.txt"]},// consumerFiles中指定的混淆配置文件会在构建依赖这个library的工程或library时被应用"consumerFiles": ["./consumer-rules.txt"]}},},],"targets": [{"name": "default"}]
}
2. 选中HAR模块的根目录,点击Build > Make Module '<module-name>'启动构建。

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

根据工程特性,mgplayer_hms 采用构建闭源HAR 的方式。
模块级build-profile.json5的示例如下所示:
{"apiType": "stageMode", //API类型,支持FA(faMode) 和 Stage(stageMode)模型"showInServiceCenter": true, //是否在服务中心展示"buildOption": { //配置项目在构建过程中使用的相关配置//配置筛选har依赖.so资源文件的过滤规则"nativeLib": {"filter": {//按照.so文件的优先级顺序,打包最高优先级的.so文件"pickFirsts": ["**/1.so"],//按照.so文件的优先级顺序,打包最低优先级的.so文件"pickLasts": ["**/2.so"],//排除的.so文件"excludes": ["**/3.so", //排除所有名称为“3”的so文件"**/x86_64/*.so //排除所有x86_64架构的so文件],//允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件"enableOverride": true}},"sourceOption": { //使用不同的标签对源代码进行分类,以便在构建过程中对不同的源代码进行不同的处理"workers": []},//cpp相关编译配置"externalNativeOptions": {"path": "./src/main/cpp/CMakeLists.txt", //CMake配置文件,提供CMake构建脚本"arguments": "", //传递给CMake的可选编译参数"abiFilters": [ //用于设置本机的ABI编译环境"arm64-v8a","x86_64"],"cppFlags": "" //设置C++编译器的可选参数},//ArkTS编译配置"arkOptions":{"types":[] //配置d.ts/d.ets的相对路径或包名,用于使用自定义的声明类型},},"buildOptionSet": [ //buildOption的集合,{"name": "release", //定义buildOption的名字,取值有default、debug 和 release,也可自定义"arkOptions": {"obfuscation": { //针对release模式下的配置"ruleOptions": {"enable": true, // 默认为true"files": [ //混淆文件的相对路径"./obfuscation-rules.txt"]},"consumerFiles": './consumer-rules.txt' //仅Static Library模块可配置:默认导出的混淆规则}},"debuggable": true, //定义编译模式是否为debug"copyFrom": "release", //从指定的buildOption中复制相关配置"resOptions": {},//cpp相关编译配置"externalNativeOptions": {"path": "./src/main/cpp/CMakeLists.txt", //CMake配置文件,提供CMake构建脚本"arguments": "", //传递给CMake的可选编译参数"abiFilters": [ //用于设置本机的ABI编译环境"arm64-v8a","x86_64"],"cppFlags": "" //设置C++编译器的可选参数},"sourceOption": { //使用不同的标签对源代码进行分类,以便在构建过程中对不同的源代码进行不同的处理"workers": []},//配置筛选har依赖.so资源文件的过滤规则"nativeLib": {"filter": {//按照.so文件的优先级顺序,打包最高优先级的.so文件"pickFirsts": ["**/1.so"],//按照.so文件的优先级顺序,打包最低优先级的.so文件"pickLasts": ["**/2.so"],//排除的.so文件"excludes": ["**/3.so"],//允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件"enableOverride": true}},}],"buildModeBinder": [ //构建模式与构建配置的关联配置,通过该配置可以将不同的构建配置和target进行组合,并绑定到对应的构建模式上,其中构建模式需要在工程级别的构建模式列表中{"buildModeName": "debug","mappings": [ //构建模式绑定中的具体映射表,描述的是target和构建配置的一对一的关系{"targetName": "default","buildOptionName": "release"}]}],"targets": [ //定义的target,开发者可以定制不同的target,具体请参考配置多目标构建产物章节{"name": "default",},{"name": "ohosTest",} ]
}
相关文章:
【HarmonyOS NEXT】har 包的构建生成过程
Har模块文件结构 构建HAR 打包规则 开源HAR除了默认不需要打包的文件(build、node_modules、oh_modules、.cxx、.previewer、.hvigor、.gitignore、.ohpmignore)和.gitignore/.ohpmignore中配置的文件,cpp工程的CMakeLists.txt,…...
从0开发一个Chrome插件:项目实战——翻译插件(附带申请谷歌翻译、百度翻译教程)
前言 这是《从0开发一个Chrome插件》系列的第十八篇文章,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件?从0开发一个Chrome插件:开发Chrome插件的必…...
查看nginx安装/配置路径,一个服务器启动两个nginx
查看nginx安装/配置路径 查看nginx的pid: ps -ef | grep nginx查看pid对应服务的启动路径 ll /proc/2320/exe使用检查配置文件命令,查看配置文件位置 /usr/local/nginx/sbin/nginx -t一个服务启动两个nginx 拷贝一份程序,cpbin是我自己创…...
JavaScript中 Map与reduce的应用
1. Map:映射新世界 Map构造函数创建一个新Map对象,它允许你以键值对的形式存储数据,提供了一种更加灵活的数据结构。与传统的对象相比,Map允许任何值(包括对象)作为键,而且具有更好的性能表现。…...
1688商品详情API:一键解锁海量批发数据
引言 1688作为阿里巴巴旗下的B2B交易平台,拥有庞大的商品数据库和丰富的供应商资源。对于想要获取商品详细信息的开发者和企业而言,1688提供的API接口是获取一手数据的关键途径。本文将详细介绍如何使用1688商品详情API,包括注册、获取API密…...
C#结合JS 修改解决 KindEditor 弹出层问题
目录 问题现象 原因分析 范例运行环境 解决问题 修改 kindeditor.js C# 服务端更新 小结 问题现象 KindEditor 是一款出色的富文本HTML在线编辑器,关于编辑器的详细介绍可参考我的文章《C# 将 TextBox 绑定为 KindEditor 富文本》,这里我们讲述在…...
二开的精美UI站长源码分享论坛网站源码 可切换皮肤界面
二开的精美UI站长源码分享论坛网站源码 可切换皮肤界面 二开的精美UI站长源码分享论坛网站源码 可切换皮肤界面...
【diffusers极速入门(三)】生成的图像尺寸与 UNet 和 VAE 之间的关系
先上结论,一句话总结即: SD 图片的输入\输出尺寸(高或宽) Unet 输入\输出的样本尺寸(高或宽) x VAE 的缩放尺寸 在使用生成模型时,特别是图像生成任务中,理解 UNet 和 VAE…...
react实现窗口悬浮框,可拖拽、折叠、滚动
1、效果如下 2、如下两个文件不需要修改 drag.js import React from "react"; import PropTypes from "prop-types";export default class DragM extends React.Component {static propTypes {children: PropTypes.element.isRequired};static defaultP…...
52【场景作图】空间感
参考 场景绘制,画面空间感如何拉开?分分钟就能学会的场景优化思路更新啦!_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1pa411J7Ps/?spm_id_from333.337.search-card.all.click&vd_source20db0c4e2d303527ed13c4b9cdf698ec 1 …...
SpringBoot系列之搭建WebSocket应用
SpringBoot系列之ServerEndpoint方式开发WebSocket应用。在实时的数据推送方面,经常会使用WebSocket或者MQTT来实现,WebSocket是一种不错的方案,只需要建立连接,服务端和客户端就可以进行双向的数据通信。很多网站的客户聊天&…...
RK3568技术笔记十四 Ubuntu创建共享文件夹
单击“虚拟机”,单击“设置”,如图所示: 单击“选项”,选择“总是启用(E)”,单击“添加”,如图所示: 单击“下一步”,如图所示: 单击“浏览”添加…...
JavaScript 获取地理位置 Geolocation
在现代的 web 应用程序中,获取用户的地理位置信息是一项常见的需求。这可以用于提供个性化内容、本地化服务或者基于位置的功能。HTML5 引入了 Geolocation API,使得从浏览器中获取地理位置信息变得非常简单。 1. Geolocation API 简介 Geolocation AP…...
android串口助手apk下载 源码 演示 支持android 4-14及以上
android串口助手apk下载 1、自动获取串口列表 2、打开串口就开始接收 3、收发 字符或16进制 4、默认发送at\r\n 5、android串口助手apk 支持android 4-14 (Google seral port 太老) 源码找我 需要 用adb root 再setenforce 0进入SELinux 模式 才有权限…...
windows11 生产力工具配置
一、系统安装 官方windows11.iso镜像文件安装操作系统时,会强制要求联网验证,否则无法继续安装操作系统,跳过联网登录账号的方式为:按下【shiftF10】快捷键,调出cmd命令窗口,输入命令 OOBE\BYPASSNRO 等…...
Nacos配置中心不可用会有什么影响
服务端: Nacos的数据存储接口 com.alibaba.nacos.config.server.service.DataSourceService 有两种实现: 如果指定了mysq 作为数据库,则必须使用 mysql 如果是 集群方式部署Nacos,则必须使用mysql 如果是单例方式部署 并且 没…...
AI时代下的自动化代码审计工具
代码审计工具分享 吉祥学安全知识星球🔗除了包含技术干货:Java代码审计、web安全、应急响应等,还包含了安全中常见的售前护网案例、售前方案、ppt等,同时也有面向学生的网络安全面试、护网面试等。 这两年一直都在提“安全左移”&…...
不懂索引,简历上都不敢写自己熟悉SQL优化
大家好,我是考哥。 今天给大家带来MySQL索引相关核心知识。对MySQL索引的理解甚至比你掌握SQL优化还重要,索引是优化SQL的前提和基础,我们一步步来先打好地基。 当MySQL表数据量不大时,缺少索引对查询性能的影响不会太大&#x…...
C# 设置PDF表单不可编辑、或提取PDF表单数据
PDF表单是PDF中的可编辑区域,允许用户填写指定信息。当表单填写完成后,有时候我们可能需要将其设置为不可编辑,以保护表单内容的完整性和可靠性。或者需要从PDF表单中提取数据以便后续处理或分析。 之前文章详细介绍过如何使用免费Spire.PDF…...
面试篇-求两个有序数组的交集
题目 两个有序数组,第一个有序数组m是1000w个元素,第二个有序数组n是1000个元素,求交集,需要考虑时间复杂度和空间复杂度。 解题思路 解法1:遍历小数组n,在m数组中进行折半查找,根据数组有序…...
Linux上运行Cursor编辑器:AppImage打包与AI编程环境搭建指南
1. 项目概述:一个为Linux用户定制的代码编辑器如果你是一名长期在Linux环境下工作的开发者,尤其是习惯了使用VS Code这类现代编辑器,但又对某些AI辅助编程工具(比如Cursor)的便捷性念念不忘,那么你很可能已…...
电磁兼容(EMC)设计实战:从干扰源头到系统防护的完整指南
1. 电磁兼容(EMC)设计的核心逻辑 电磁兼容设计就像给电子设备打造一套"防干扰盔甲"。想象一下,你正在用手机通话时,突然听到收音机杂音——这就是典型的电磁干扰现象。EMC设计要解决两个核心问题:不让自家设…...
python访问sqlite(sqlalchemy)(orm方式)
文章目录sqlalchemy的理解Base declarative_base()的作用?__repr__方法查询db.query()并不是查询,query.count()和query.offset()才是查询?查询-拼接条件分组关联查询新增修改删除安装依赖开始接触sqlalchemy不太习惯,感觉有点抽象。后来换个视角瞬间…...
Applite:用图形化界面轻松管理Mac软件的终极解决方案
Applite:用图形化界面轻松管理Mac软件的终极解决方案 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为Mac上繁琐的软件管理而烦恼吗?Applite作为一…...
为什么你的Windows任务栏需要一次彻底的美学革命?
为什么你的Windows任务栏需要一次彻底的美学革命? 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否曾经盯着Windows桌面…...
半导体制造模式之争:IDM与Fabless的战略选择与未来趋势
1. 半导体制造模式的世纪之争:IDM与Fabless的路线抉择“真男人就该有自己的晶圆厂。” 这句话出自AMD创始人杰里桑德斯之口,在半导体产业的早期,它像一句战斗口号,定义了那个时代顶级芯片公司的雄心——将设计与制造牢牢掌握在自己…...
智能家居设备链故障诊断:从HDCP黑屏到系统化排查指南
1. 从一次“黑屏”故障说开去:智能家居时代的设备链诊断困境上周的一个晚上,我出门取外卖,为了让新来的小猫Mulligan自娱自乐,我特意把电视开着,让它继续玩Roku屏保里的虚拟水族箱。这算是它最喜欢的“游戏”之一。等我…...
简化OpenAI API调用:轻量级封装库实践指南
1. 项目概述:一个极简的OpenAI API封装库 如果你正在开发一个需要集成AI能力的应用,比如一个聊天机器人、一个内容生成工具,或者一个代码助手,那么你大概率绕不开OpenAI的API。它的功能强大,文档也还算清晰࿰…...
Flutter + 开源鸿蒙跨端实战|基于空间地理信息的**城市全域智慧泊车调度与多维运维管理平台** Day1 项目架构基座与工程化环境搭建
Flutter 开源鸿蒙跨端实战|基于空间地理信息的城市全域智慧泊车调度与多维运维管理平台 Day1 项目架构基座与工程化环境搭建 欢迎入驻开源鸿蒙全栈技术实战社区:https://openharmonycrossplatform.csdn.net <!-- Schema.org 结构化数据 --> <…...
通过稳定的路由与容灾机制保障关键业务中的AI服务连续性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过稳定的路由与容灾机制保障关键业务中的AI服务连续性 在将大模型能力集成到关键业务流程时,服务的连续性与可靠性是…...
