【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配置参数。
javascript 复制代码
{
  "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"
    }
  ]
}
  1. 对于开源har,若部分工程源文件无需构建到HAR包中,可在module目录下新建****.ohpmignore**** 文件,配置打包时要忽略的文件,支持正则表达式写法。将无需打包进HAR包的文件/文件夹名称写入****.ohpmignore**** 文件中。DevEco Studio构建时将过滤掉****.ohpmignore**** 文件中所包含的文件/文件夹。
  1. 选中HAR模块的根目录,点击Build > Make Module '<module-name>' 启动构建。
  1. 构建完成后,build目录下生成HAR包产物。

构建闭源HAR

DevEco Studio支持闭源HAR构建,通过对代码进行编译混淆,生成闭源HAR。在不共享源码的情况下,通过闭源HAR对外提供组件、资源等,可以实现多个模块或者多个工程共享组件、资源等。

  1. 新建的HAR模块在编译模式为release模式时默认为构建闭源HAR,即build-profile.json5文件中obfuscation下的enable字段为true。
javascript 复制代码
{
  "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"
    }
  ]
}
  1. 选中HAR模块的根目录,点击Build > Make Module '<module-name>' 启动构建。
  1. 构建完成后,build目录下生成HAR包产物。

根据工程特性,mgplayer_hms 采用构建闭源HAR 的方式。

模块级build-profile.json5的示例如下所示:

javascript 复制代码
{
  "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",
    }    
  ]
}
相关推荐
遇到困难睡大觉哈哈20 小时前
HarmonyOS —— Remote Communication Kit 拦截器(Interceptor)高阶定制能力笔记
笔记·华为·harmonyos
遇到困难睡大觉哈哈21 小时前
HarmonyOS —— Remote Communication Kit 定制处理行为(ProcessingConfiguration)速记笔记
笔记·华为·harmonyos
氤氲息21 小时前
鸿蒙 ArkTs 的WebView如何与JS交互
javascript·交互·harmonyos
遇到困难睡大觉哈哈21 小时前
HarmonyOS支付接入证书准备与生成指南
华为·harmonyos
赵浩生21 小时前
鸿蒙技术干货10:鸿蒙图形渲染基础,Canvas绘图与自定义组件实战
harmonyos
赵浩生21 小时前
鸿蒙技术干货9:deviceInfo 设备信息获取与位置提醒 APP 整合
harmonyos
BlackWolfSky1 天前
鸿蒙暂未归类知识记录
华为·harmonyos
L、2181 天前
Flutter 与开源鸿蒙(OpenHarmony):跨平台开发的新未来
flutter·华为·开源·harmonyos
L、2181 天前
Flutter 与 OpenHarmony 深度融合实践:打造跨生态高性能应用(进阶篇)
javascript·flutter·华为·智能手机·harmonyos