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

HarmonyOS NEXT系列之定制化构建制品

定制化构建制品

  • 〇、前言
  • 一、鸿蒙工程的编译配置文件
    • 1、默认内容
    • 2、完整内容
    • 3、认识默认配置项
      • 3.1、apiType
      • 3.2、targets
      • 3.3、buildOptionSet
  • 二、自定义编译
    • 1、目录包括

〇、前言

上一周,为了让自己开发的工具 EasyRouter,在 ohpm 中心仓中获得满分,所以针对评分规则添加了带 example 目录的 v1.1.0 版本,然而,等到审核成功并上架后,却发现仍旧没有拿到满分,而后我在 ohpm 中心仓上找一个已经获得满分的、其他人制作的工具,查看对应的源码工程,发现 example 目录必须在 src 目录同级,才能被扫描和识别。

那么问题来了,默认情况下,编译 har 包都只会将 src 目录编译进制品中,而 src 目录同级的其他目录是不会被打包的,如果想要一起打包进去,该如何操作呢?以及推而广之,输出 har 包制品时,能不能根据需要进行定制呢?下面就让我向大家分享,如何实现定制化构建制品

一、鸿蒙工程的编译配置文件

对于使用过 make 工具管理 C/C++ 项目的人来说,一定清楚 makefile.txt在make工具中的作用:控制编译,而在鸿蒙工程中,也有起到控制编译作用的文件,即 build-profile.json5 文件,而该文件与 makefile.txt 存在不同的地方,只不过是区分模块级和项目级。

1、默认内容

在 DevEco Studio 中创建的项目或模块,会自动创建 build-profile.json5 文件,并且默认具有如下配置项:

{"apiType": "stageMode","buildOption": {},"buildOptionSet": [{"name": "release","arkOptions": {"obfuscation": {"ruleOptions": {"enable": false,"files": ["./obfuscation-rules.txt"]},"consumerFiles": ["./consumer-rules.txt"]}},},],"targets": [{"name": "default"},{"name": "ohosTest"}]
}

如果你此前从未仔细阅读过相关官方文档,可能会认为 build-profile.json5 文件完整内容就是这样的,然而,实际上以上不过是保障项目正常运行所必须的基础配置罢了。

2、完整内容

build-profile.json5 文件作为控制编译过程的配置文件,完整内容涵盖丰富:

apiType
targets
└── name
└── runtimeOS
└── config└── distroFilter / distributionFilter└── apiVersion└── policy└── value└── screenShape└── policy└── value└── screenWindow└── policy└── value└── screenDensity└── policy└── value└── countryCode└── policy└── value└── deviceType└── buildOption└── atomicService└── preloads└── moduleName
└── source└── abilities└── name└── pages└── res└── icon└── label└── launchType└── pages└── sourceRoots
└── resource└── directories
└── output└── artifactName
showInServiceCenter
buildOption
buildOptionSet
└── name
└── debuggable
└── generateSharedTgz
└── copyFrom
└── resOptions└── compression└── media└── enable└── filters└── method└── type└── blocks└── files└── path└── size└── resolution└── exclude└── path└── size└── resolution└── resCompileThreads└── copyCodeResource└── enable└── includes└── excludes└── ignoreResourcePattern└── excludeHarRes└── includeAppScopeRes
└── externalNativeOptions└── path└── abiFilters└── arguments└── cppFlags└── cFlags└── targets
└── sourceOption└── workers
└── nativeLib└── filter└── excludes└── pickFirsts└── pickLasts└── enableOverride└── select└── package└── version└── includePattern└── excludePattern└── include└── exclude└── debugSymbol└── strip└── exclude└── headerPath└── collectAllLibs└── excludeFromHar└── excludeSoFromInterfaceHar└── librariesInfo└── name└── linkLibraries
└── napiLibFilterOption└── excludes└── pickFirsts└── pickLasts└── enableOverride
└── arkOptions└── runtimeOnly└── sources└── packages└── excludePackages└── types  └── obfuscation└── ruleOptions└── enable└── files└── consumerFiles└── buildProfileFields└── integratedHsp└── transformLib└── branchElimination└── byteCodeHar└── bundledDependencies└── packSourceMap└── autoLazyImport└── reExportCheckMode└── skipOhModulesLint└── apPath└── hostPGO
└── packingOptions└── asset└── include└── exclude
└── removePermissions└── name
buildModeBinder
└── buildModeName
└── mappings└── targetName└── buildOptionName
entryModules

原则上,就是需要控制编译过程中的什么东西,就相对应的加上什么配置。

3、认识默认配置项

在学会控制编译时,将 src 之外的目录一起打包之前,先对默认生成的配置项进行认识和了解。
build-profile.json5 文件的默认内容,主要包括三大方面:API 类型、编译混淆规则和制品输出目录。

3.1、apiType

build-profile.json5 文件中,一级字段的头一个就是 apiType,而它起到控制 API模型的作用,当前,鸿蒙工程API模型主要有 stageMode 和 faMode 两种,所以,apiType 的合法值也就是这两种。

模块级 build-profile.json5 文件中的 apiType 的值,要与项目级的保持一致。

3.2、targets

targets 配置项的功能,其实很好理解,就是控制制品的最终输出情况,比如生成的 har 包名称
在这里插入图片描述
这里主要利用到 targets 元素对象的 output 字段。

3.3、buildOptionSet

这个配置项,主要起到控制是否进行混淆编译的作用,默认只对 release 制品有配置规则。

二、自定义编译

1、目录包括

首先,看一下在进行自定义编译的时候,如何控制目录包括。

在 buildOption 配置对象里面,有一个 packingOptions 配置项:
在这里插入图片描述
这个配置项,正是我们实现目录包括所需要的,例如:

"buildOption": {"packingOptions": {"asset": {"include": ["./example/*"]}}
}

就可以实现 src 目录同级的 example 目录一并打包进制品中:
在这里插入图片描述
而 buildOption 的其他字段的作用,分别如下:
在这里插入图片描述
而 arkOptions 在实现跨模块路由功能的介绍中,已经使用过 runtimeOnly 配置。

对编译过程进行控制,基本上就是利用 buildOption 中的相关配置项,而详细的说明可以参考官方文档:自定义编译指导

http://www.dtcms.com/a/311096.html

相关文章:

  • HarmonyOS 开发:基于 ArkUI 实现复杂表单验证的最佳实践
  • 电子电气架构 --- 汽车网络安全概述
  • lumerical——布拉格光栅(2)
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现道路车辆事故的检测识别(C#代码UI界面版)
  • LLM隐藏层状态: outputs.hidden_states 是 MLP Residual 还是 Layer Norm
  • 【前端:Html】--1.1.基础语法
  • 在 Elasticsearch 中落地 Learning to Rank(LTR)
  • 修改git commit 提交版本的描述信息
  • 【算法笔记 day four】二分查找
  • realIADD3复现笔记
  • 记录一次ESP32报错Guru Meditation Error: Core 1 panic‘ed (Double exception).
  • 大模型Agent记忆的主流技术与优缺点解析
  • OpenCV HSV与RGB颜色模型的区别
  • 深度学习核心:神经网络-激活函数 - 原理、实现及在医学影像领域的应用
  • 【matlab例程】无迹粒子滤波(UPF)的例程,用于三维环境下多雷达目标跟踪,非线性系统
  • Maven引入其他模块无法调用,出现Unable to find main class
  • [Windows] 微软.Net运行库离线合集包 Microsoft .Net Packages AIO v13.05.25
  • chrome的数据采集插件chat4data的使用
  • Vue 服务端渲染 Nuxt 使用详解
  • WinForm之ListBox 控件
  • Android内存优化核弹方案:LeakCanary 3.0定制化与Heap Dump自动化分析实战
  • WordPress AI写作插件开发实战:从GPT集成到企业级部署
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博舆情数据可视化分析-热词情感趋势柱状图
  • uniapp倒计时计算
  • 【Linux系统】详解,进程控制
  • NCV8402ASTT1G自保护N沟道功率MOSFET安森美/ONSEMI 过流过温保护汽车级驱动NCV8402ASTT1
  • 【论文精读】3D Gaussian Splatting for Real-Time Radiance Field Rendering
  • 八股取士-go
  • Angular初学者入门第一课——搭建并改造项目(精品)
  • MySQL(174)如何理解MySQL的多版本并发控制(MVCC)?