当前位置: 首页 > news >正文

【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除了默认不需要打包的文件&#xff08;build、node_modules、oh_modules、.cxx、.previewer、.hvigor、.gitignore、.ohpmignore&#xff09;和.gitignore/.ohpmignore中配置的文件&#xff0c;cpp工程的CMakeLists.txt&#xff0c;…...

从0开发一个Chrome插件:项目实战——翻译插件(附带申请谷歌翻译、百度翻译教程)

前言 这是《从0开发一个Chrome插件》系列的第十八篇文章,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件?从0开发一个Chrome插件:开发Chrome插件的必…...

查看nginx安装/配置路径,一个服务器启动两个nginx

查看nginx安装/配置路径 查看nginx的pid&#xff1a; ps -ef | grep nginx查看pid对应服务的启动路径 ll /proc/2320/exe使用检查配置文件命令&#xff0c;查看配置文件位置 /usr/local/nginx/sbin/nginx -t一个服务启动两个nginx 拷贝一份程序&#xff0c;cpbin是我自己创…...

JavaScript中 Map与reduce的应用

1. Map&#xff1a;映射新世界 Map构造函数创建一个新Map对象&#xff0c;它允许你以键值对的形式存储数据&#xff0c;提供了一种更加灵活的数据结构。与传统的对象相比&#xff0c;Map允许任何值&#xff08;包括对象&#xff09;作为键&#xff0c;而且具有更好的性能表现。…...

1688商品详情API:一键解锁海量批发数据

引言 1688作为阿里巴巴旗下的B2B交易平台&#xff0c;拥有庞大的商品数据库和丰富的供应商资源。对于想要获取商品详细信息的开发者和企业而言&#xff0c;1688提供的API接口是获取一手数据的关键途径。本文将详细介绍如何使用1688商品详情API&#xff0c;包括注册、获取API密…...

C#结合JS 修改解决 KindEditor 弹出层问题

目录 问题现象 原因分析 范例运行环境 解决问题 修改 kindeditor.js C# 服务端更新 小结 问题现象 KindEditor 是一款出色的富文本HTML在线编辑器&#xff0c;关于编辑器的详细介绍可参考我的文章《C# 将 TextBox 绑定为 KindEditor 富文本》&#xff0c;这里我们讲述在…...

二开的精美UI站长源码分享论坛网站源码 可切换皮肤界面

二开的精美UI站长源码分享论坛网站源码 可切换皮肤界面 二开的精美UI站长源码分享论坛网站源码 可切换皮肤界面...

【diffusers极速入门(三)】生成的图像尺寸与 UNet 和 VAE 之间的关系

先上结论&#xff0c;一句话总结即&#xff1a; SD 图片的输入\输出尺寸&#xff08;高或宽&#xff09; Unet 输入\输出的样本尺寸&#xff08;高或宽&#xff09; x VAE 的缩放尺寸 在使用生成模型时&#xff0c;特别是图像生成任务中&#xff0c;理解 UNet 和 VAE&#xf…...

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【场景作图】空间感

参考 场景绘制&#xff0c;画面空间感如何拉开&#xff1f;分分钟就能学会的场景优化思路更新啦&#xff01;_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1pa411J7Ps/?spm_id_from333.337.search-card.all.click&vd_source20db0c4e2d303527ed13c4b9cdf698ec 1 …...

SpringBoot系列之搭建WebSocket应用

SpringBoot系列之ServerEndpoint方式开发WebSocket应用。在实时的数据推送方面&#xff0c;经常会使用WebSocket或者MQTT来实现&#xff0c;WebSocket是一种不错的方案&#xff0c;只需要建立连接&#xff0c;服务端和客户端就可以进行双向的数据通信。很多网站的客户聊天&…...

RK3568技术笔记十四 Ubuntu创建共享文件夹

单击“虚拟机”&#xff0c;单击“设置”&#xff0c;如图所示&#xff1a; 单击“选项”&#xff0c;选择“总是启用&#xff08;E&#xff09;”&#xff0c;单击“添加”&#xff0c;如图所示&#xff1a; 单击“下一步”&#xff0c;如图所示&#xff1a; 单击“浏览”添加…...

JavaScript 获取地理位置 Geolocation

在现代的 web 应用程序中&#xff0c;获取用户的地理位置信息是一项常见的需求。这可以用于提供个性化内容、本地化服务或者基于位置的功能。HTML5 引入了 Geolocation API&#xff0c;使得从浏览器中获取地理位置信息变得非常简单。 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 &#xff08;Google seral port 太老&#xff09; 源码找我 需要 用adb root 再setenforce 0进入SELinux 模式 才有权限…...

windows11 生产力工具配置

一、系统安装 官方windows11.iso镜像文件安装操作系统时&#xff0c;会强制要求联网验证&#xff0c;否则无法继续安装操作系统&#xff0c;跳过联网登录账号的方式为&#xff1a;按下【shiftF10】快捷键&#xff0c;调出cmd命令窗口&#xff0c;输入命令 OOBE\BYPASSNRO 等…...

Nacos配置中心不可用会有什么影响

服务端&#xff1a; Nacos的数据存储接口 com.alibaba.nacos.config.server.service.DataSourceService 有两种实现&#xff1a; 如果指定了mysq 作为数据库&#xff0c;则必须使用 mysql 如果是 集群方式部署Nacos&#xff0c;则必须使用mysql 如果是单例方式部署 并且 没…...

AI时代下的自动化代码审计工具

代码审计工具分享 吉祥学安全知识星球&#x1f517;除了包含技术干货&#xff1a;Java代码审计、web安全、应急响应等&#xff0c;还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 这两年一直都在提“安全左移”&…...

不懂索引,简历上都不敢写自己熟悉SQL优化

大家好&#xff0c;我是考哥。 今天给大家带来MySQL索引相关核心知识。对MySQL索引的理解甚至比你掌握SQL优化还重要&#xff0c;索引是优化SQL的前提和基础&#xff0c;我们一步步来先打好地基。 当MySQL表数据量不大时&#xff0c;缺少索引对查询性能的影响不会太大&#x…...

C# 设置PDF表单不可编辑、或提取PDF表单数据

PDF表单是PDF中的可编辑区域&#xff0c;允许用户填写指定信息。当表单填写完成后&#xff0c;有时候我们可能需要将其设置为不可编辑&#xff0c;以保护表单内容的完整性和可靠性。或者需要从PDF表单中提取数据以便后续处理或分析。 之前文章详细介绍过如何使用免费Spire.PDF…...

面试篇-求两个有序数组的交集

题目 两个有序数组&#xff0c;第一个有序数组m是1000w个元素&#xff0c;第二个有序数组n是1000个元素&#xff0c;求交集&#xff0c;需要考虑时间复杂度和空间复杂度。 解题思路 解法1&#xff1a;遍历小数组n&#xff0c;在m数组中进行折半查找&#xff0c;根据数组有序…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

比特币:固若金汤的数字堡垒与它的四道防线

第一道防线&#xff1a;机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”&#xff08;Hashing&#xff09;就是一种军事级的加密术&#xff08;SHA-256&#xff09;&#xff0c;能将信函内容&#xff08;交易细节&#xf…...