当前位置: 首页 > 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",}    ]
}

http://www.lryc.cn/news/377562.html

相关文章:

  • 从0开发一个Chrome插件:项目实战——翻译插件(附带申请谷歌翻译、百度翻译教程)
  • 查看nginx安装/配置路径,一个服务器启动两个nginx
  • JavaScript中 Map与reduce的应用
  • 1688商品详情API:一键解锁海量批发数据
  • C#结合JS 修改解决 KindEditor 弹出层问题
  • 二开的精美UI站长源码分享论坛网站源码 可切换皮肤界面
  • 【diffusers极速入门(三)】生成的图像尺寸与 UNet 和 VAE 之间的关系
  • react实现窗口悬浮框,可拖拽、折叠、滚动
  • 52【场景作图】空间感
  • SpringBoot系列之搭建WebSocket应用
  • RK3568技术笔记十四 Ubuntu创建共享文件夹
  • JavaScript 获取地理位置 Geolocation
  • android串口助手apk下载 源码 演示 支持android 4-14及以上
  • windows11 生产力工具配置
  • Nacos配置中心不可用会有什么影响
  • AI时代下的自动化代码审计工具
  • 不懂索引,简历上都不敢写自己熟悉SQL优化
  • C# 设置PDF表单不可编辑、或提取PDF表单数据
  • 面试篇-求两个有序数组的交集
  • Web爬虫-edu_SRC-目标列表爬取
  • 云原生周刊:Harbor v2.11 版本发布 | 2024.6.17
  • 低版本火狐浏览器报错:class is a reserved identifier
  • 掌握高等数学、线性代数、概率论所需数学知识及标题建议
  • value_and_grad
  • AI 已经在污染互联网了。。赛博喂屎成为现实
  • Linux系统安装ODBC驱动,统信服务器E版安装psqlodbc方法
  • 品牌对电商平台价格的监测流程
  • osgearth提示“simple.earth: file not handled”
  • hbuilderx如何打包ios app,如何生成证书
  • 扩散模型荣获CVPR2024最佳论文奖,最新成果让评估和改进生成模型更加效率!