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

打印 上一主题 下一主题

主题 839|帖子 839|积分 2517

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配置参数。
  1. {
  2.   "apiType": "stageMode",
  3.   "buildOption": {
  4.   },
  5.   "buildOptionSet": [
  6.     {
  7.       "name": "release",
  8.       "arkOptions": {
  9.         // 开源har相关参数
  10.         "obfuscation": {
  11.           "ruleOptions": {
  12.             // true表示进行混淆,false表示不进行混淆。默认为true
  13.             "enable": false,
  14.             ]
  15.           },
  16.           // consumerFiles中指定的混淆配置文件会在构建依赖这个library的工程或library时被应用
  17.           "consumerFiles": [
  18.             "./consumer-rules.txt"
  19.           ]
  20.         }
  21.       },
  22.     },
  23.   ],
  24.   "targets": [
  25.     {
  26.       "name": "default"
  27.     }
  28.   ]
  29. }
复制代码
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。
  1. {
  2.   "apiType": "stageMode",
  3.   "buildOption": {
  4.   },
  5.   "buildOptionSet": [
  6.     {
  7.       "name": "release",
  8.       "arkOptions": {
  9.         // 闭源har相关参数
  10.         "obfuscation": {
  11.           "ruleOptions": {
  12.             // true表示进行混淆,false表示不进行混淆。默认为true
  13.             "enable": true,
  14.             // 混淆规则文件
  15.             "files": [
  16.               "./obfuscation-rules.txt"
  17.             ]
  18.           },
  19.           // consumerFiles中指定的混淆配置文件会在构建依赖这个library的工程或library时被应用
  20.           "consumerFiles": [
  21.             "./consumer-rules.txt"
  22.           ]
  23.         }
  24.       },
  25.     },
  26.   ],
  27.   "targets": [
  28.     {
  29.       "name": "default"
  30.     }
  31.   ]
  32. }
复制代码
2. 选中HAR模块的根目录,点击Build > Make Module '<module-name>'启动构建。

3. 构建完成后,build目录下天生HAR包产物。





根据工程特性,mgplayer_hms 采用构建闭源HAR 的方式。
模块级build-profile.json5的示比方下所示:
  1. {
  2.   "apiType": "stageMode",  //API类型,支持FA(faMode) 和 Stage(stageMode)模型
  3.   "showInServiceCenter": true,  //是否在服务中心展示
  4.   "buildOption": {  //配置项目在构建过程中使用的相关配置
  5.     //配置筛选har依赖.so资源文件的过滤规则
  6.     "nativeLib": {
  7.        "filter": {
  8.           //按照.so文件的优先级顺序,打包最高优先级的.so文件
  9.           "pickFirsts": [
  10.              "**/1.so"
  11.            ],
  12.            //按照.so文件的优先级顺序,打包最低优先级的.so文件
  13.            "pickLasts": [
  14.               "**/2.so"
  15.            ],
  16.            //排除的.so文件
  17.            "excludes": [
  18.               "**/3.so", //排除所有名称为“3”的so文件
  19.               "**/x86_64/*.so //排除所有x86_64架构的so文件
  20.            ],
  21.            //允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件
  22.            "enableOverride": true
  23.        }
  24.     },
  25.     "sourceOption": {   //使用不同的标签对源代码进行分类,以便在构建过程中对不同的源代码进行不同的处理
  26.       "workers": []
  27.     },
  28.     //cpp相关编译配置
  29.     "externalNativeOptions": {
  30.       "path": "./src/main/cpp/CMakeLists.txt",  //CMake配置文件,提供CMake构建脚本
  31.       "arguments": "",  //传递给CMake的可选编译参数
  32.       "abiFilters": [  //用于设置本机的ABI编译环境
  33.         "arm64-v8a",
  34.         "x86_64"
  35.       ],
  36.       "cppFlags": ""  //设置C++编译器的可选参数
  37.     },
  38.     //ArkTS编译配置
  39.     "arkOptions":{
  40.       "types":[]  //配置d.ts/d.ets的相对路径或包名,用于使用自定义的声明类型
  41.     },
  42.   },
  43.   "buildOptionSet": [  //buildOption的集合,
  44.     {
  45.       "name": "release",  //定义buildOption的名字,取值有default、debug 和 release,也可自定义
  46.       "arkOptions": {
  47.         "obfuscation": {  //针对release模式下的配置
  48.           "ruleOptions": {
  49.             "enable": true,   // 默认为true
  50.             "files": [   //混淆文件的相对路径
  51.               "./obfuscation-rules.txt"
  52.             ]
  53.           },
  54.           "consumerFiles": './consumer-rules.txt' //仅Static Library模块可配置:默认导出的混淆规则
  55.         }
  56.       },
  57.       "debuggable": true,  //定义编译模式是否为debug
  58.       "copyFrom": "release",  //从指定的buildOption中复制相关配置
  59.       "resOptions": {},
  60.       //cpp相关编译配置
  61.       "externalNativeOptions": {
  62.         "path": "./src/main/cpp/CMakeLists.txt",  //CMake配置文件,提供CMake构建脚本
  63.         "arguments": "",  //传递给CMake的可选编译参数
  64.         "abiFilters": [  //用于设置本机的ABI编译环境
  65.           "arm64-v8a",
  66.           "x86_64"
  67.         ],
  68.         "cppFlags": ""  //设置C++编译器的可选参数
  69.       },
  70.       "sourceOption": {   //使用不同的标签对源代码进行分类,以便在构建过程中对不同的源代码进行不同的处理
  71.         "workers": []
  72.       },
  73.       //配置筛选har依赖.so资源文件的过滤规则
  74.       "nativeLib": {
  75.           "filter": {
  76.             //按照.so文件的优先级顺序,打包最高优先级的.so文件
  77.             "pickFirsts": [
  78.               "**/1.so"
  79.             ],
  80.             //按照.so文件的优先级顺序,打包最低优先级的.so文件
  81.             "pickLasts": [
  82.               "**/2.so"
  83.             ],
  84.             //排除的.so文件
  85.             "excludes": [
  86.               "**/3.so"
  87.             ],
  88.             //允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件
  89.             "enableOverride": true
  90.          }
  91.       },
  92.     }
  93.   ],
  94.   "buildModeBinder": [   //构建模式与构建配置的关联配置,通过该配置可以将不同的构建配置和target进行组合,并绑定到对应的构建模式上,其中构建模式需要在工程级别的构建模式列表中
  95.     {
  96.       "buildModeName": "debug",
  97.       "mappings": [   //构建模式绑定中的具体映射表,描述的是target和构建配置的一对一的关系
  98.         {
  99.           "targetName": "default",
  100.           "buildOptionName": "release"
  101.         }
  102.       ]
  103.     }
  104.   ],
  105.   "targets": [  //定义的target,开发者可以定制不同的target,具体请参考配置多目标构建产物章节
  106.     {
  107.       "name": "default",
  108.     },
  109.     {
  110.       "name": "ohosTest",
  111.     }   
  112.   ]
  113. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表