【HarmonyOS NEXT】har 包的构建生成过程

news2024/10/6 14:32:21

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.coloradmin.cn/o/1869142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python机器学习】自动化特征选择——迭代特征选择

在单变量测试中&#xff0c;没有使用模型&#xff1b;在基于模型的选择中&#xff0c;使用单个模型来选择特征。而在迭代特征选择中&#xff0c;将会构造一系列模型&#xff0c;每个模型都使用不同数量的特征。有两种基本方法&#xff1a; 1、开始时没有特征&#xff0c;然后逐…

【MySQL基础篇】概述及SQL指令:DDL及DML

数据库是一个按照数据结构来组织、存储和管理数据的仓库。以下是对数据库概念的详细解释&#xff1a;定义与基本概念&#xff1a; 数据库是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 数据库不仅仅是数据的简单堆积&#xff0c;而是遵循一定的规则…

聚合项目学习

首先建立一个总的工程目录&#xff0c;里边后期会有我们的父工程、基础工程(继承父工程)、业务工程&#xff08;依赖基础工程&#xff09;等模块 1、在总工程目录中&#xff08;open一个空的文件夹&#xff09;&#xff0c;首先建立一个父工程模块&#xff08;通过spring init…

Unity中模拟抛物线(非Unity物理)

Unity中模拟抛物线非Unity物理 介绍剖析问题以及所需公式重力加速度公式&#xff1a;h 1/2*g*t*t(h 1/2 * g * t ^ 2)速度公式&#xff1a;Vt V初 a * t 主要代码总结 介绍 用Unity物理系统去做的抛物线想要控制速度或者想要细微的控制一些情况是非常困难的。所以想要脱离U…

【Linux系列】Fedora40安装VMware Workstation Pro报错

问题描述 由于Fedora 40使用的Linux内核是6.9,导致安装VMware Workstation Pro 时,安装依赖无法成功,具体报错如下 ..................CC [M] /tmp/modconfig-a8Fcf5/vmnet-only/smac.oCC [M] /tmp/modconfig-a8Fcf5/vmnet-only/vnetEvent.oCC [M] /tmp/modconfig-a8Fcf…

《数据勒索防范手册(1.0版)》

当前&#xff0c;数据勒索攻击已成为全球最严重的数据安全威胁之一攻击方式呈现 APT 化、平台化、多重化、AI驱动化等发展趋势:据统计&#xff0c;近年来针对制造业、公共事业、卫生保健、电力、交通、能源等领域的勒索攻击显著增加。随着云计算、边缘计算等技术的不断发展&…

深入探究小型语言模型 (SLM)

使用 Microsoft Bing Image Creator 创建 大型语言模型 (LLM) 已经流行了一段时间。最近&#xff0c;小型语言模型 (SLM) 增强了我们处理和使用各种自然语言和编程语言的能力。但是&#xff0c;一些用户查询需要比在通用语言上训练的模型所能提供的更高的准确性和领域知识。此外…

大疆车载的第一款油车智驾:上汽大众途观L Pro的智能辅助驾驶系统

引言 在自驾行业中&#xff0c;有一个低调但迅速崭露头角的选手——大疆车载。自2016年成立以来&#xff0c;大疆车载&#xff08;现已更名为卓御&#xff09;通过其先进的智能驾驶技术&#xff0c;逐渐在市场上赢得了声誉。此次&#xff0c;上汽大众途观L Pro成为大疆车载首款…

如何科学减肥先从了解自己在到饮食运动

在这个以瘦为美的时代&#xff0c;许多人被肥胖所困扰着&#xff0c; 今天就来教大家如何科学减脂。 一、如何判断自己是否需要减脂&#xff1f; 第一步就是判断自己的体重指数&#xff08;BMI&#xff09;是否在正常标准。BMI是国际上衡量人体胖瘦程度及是否健康的一个常用指…

打破生态「孤岛」,Catizen将开启Telegram小游戏2.0时代?

Catizen&#xff1a;引领Telegram x TON生态的顶级猫咪链游 在区块链游戏领域&#xff0c;吸引玩家的首要因素往往是游戏的趣味性。然而&#xff0c;仅靠趣味性无法评估一个项目的长期价值和发展潜力。真正能在区块链游戏市场中取得长久成功的项目&#xff0c;无一例外都依靠扎…

软件自动化测试有哪些流程?可替代手工测试吗?

随着科技的不断发展&#xff0c;软件在我们生活中的地位越来越重要。然而&#xff0c;在软件开发过程中&#xff0c;必然会出现各种各样的问题和bug&#xff0c;为了提高软件的质量和稳定性&#xff0c;保证用户的使用体验&#xff0c;软件自动化测试应运而生。 那么&#xff…

百元蓝牙耳机哪款性价比高?盘点性价比高的百元蓝牙耳机品牌

在如今快节奏的生活中&#xff0c;蓝牙耳机已经成为人们日常生活中不可或缺的配件。然而&#xff0c;市面上百元左右性价比高的蓝牙耳机琳琅满目&#xff0c;消费者往往难以选择到一款质量好、耐用的产品。我们希望可以为广大消费者提供一些参考和建议&#xff0c;接下来&#…

基于强化学习DQN的股票预测【股票交易】

强化学习笔记 第一章 强化学习基本概念 第二章 贝尔曼方程 第三章 贝尔曼最优方程 第四章 值迭代和策略迭代 第五章 强化学习实例分析:GridWorld 第六章 蒙特卡洛方法 第七章 Robbins-Monro算法 第八章 多臂老虎机 第九章 强化学习实例分析:CartPole 第十章 时序差分法 第十一…

商家转账到零钱开通指南

商家转账到零钱功能是微信支付开发的一款商家可以直接向个人微信发放零钱的产品&#xff0c;商家可通过此功能手动或者自动向多个微信用户发起转账。不过因为人工审核门槛的问题&#xff0c;不少商家很难自主通过申请&#xff0c;以下是经过我们上万次开通操作的经验总结&#…

观成科技:证券行业加密业务安全风险监测与防御技术研究

摘要&#xff1a;解决证券⾏业加密流量威胁问题、加密流量中的应⽤⻛险问题&#xff0c;对若⼲证券⾏业的实际流量内容进⾏调研分析&#xff0c; 分析了证券⾏业加密流量⾯临的合规性⻛险和加密协议及证书本⾝存在的⻛险、以及可能存在的外部加密流量威 胁&#xff0c;并提出防…

缓冲区溢出

本文作者&#xff1a;杉木涂鸦智能安全实验室 前置知识点 栈 栈&#xff08;Stack&#xff09;是计算机中的一种数据结构&#xff0c;用于存储临时数据。它的特点是后入先出&#xff08;LIFO&#xff09;&#xff0c;只能在栈顶添加或删除数据。在程序中&#xff0c;栈被用于…

【JavaScript】JS对象和JSON

目录 一、创建JS对象 方式一&#xff1a;new Object() 方式二&#xff1a;{属性名:属性值,...,..., 方法名:function(){ } } 二、JSON格式 JSON格式语法&#xff1a; JSON与Java对象互转: 三、JS常见对象 3.1数组对象API 3.2 其它对象API 一、创建JS对象 方式一&#xff1a;new…

创新前沿:Web3如何颠覆传统计算机模式

随着Web3技术的快速发展&#xff0c;传统的计算机模式正面临着前所未有的挑战和改变。本文将深入探讨Web3技术的定义、原理以及它如何颠覆传统计算机模式&#xff0c;以及对全球科技发展的潜在影响。 1. 引言&#xff1a;Web3技术的兴起与背景 Web3不仅仅是技术创新的一种&…

OpenAI 开启买买买模式:接连收购 Rockset 与 Multi,科技巨头创新布局

引言 最近&#xff0c;OpenAI 在科技领域引起了广泛关注&#xff0c;通过接连收购两家初创公司 Rockset 和 Multi&#xff0c;开启了所谓的“买买买模式”。这一战略举措不仅展现了 OpenAI 对于技术发展的深远布局&#xff0c;也预示着未来更多创新产品的推出。本文将详细探讨…

Dataease安装,配置Jenkins自动部署

Dataease安装&#xff0c;配置Jenkins自动部署 一.安装Dataease 安装前准备&#xff1a;1.Ubuntu20.04 LTS国内源安装指定版本Docker 2.docker-compose安装 下载离线安装的安装包&#xff0c;下载地址&#xff1a;https://community.fit2cloud.com/#/download/dataease/v1-…