鸿蒙 中HAR构建
一、HAR构建DevEco Studio默认提供debug和release两种构建模式同时支持自定义构建模式。HAR包产物分为三种格式产物格式说明包含源码的HAR源码、资源文件、配置文件debug模式包含js中间码的HAR源码混淆后生成的js中间码release模式混淆包含字节码的HARabc字节码、资源文件、配置文件提升安全性说明从DevEco Studio NEXT Beta15.0.3.800版本开始默认构建字节码HAR。HAR自身的构建不建议引用本地模块可能导致其他模块依赖该HAR包时安装失败。如安装失败需在工程级oh-package.json5中配置overrides。二、创建HAR模块新建工程时选择API 10及以上的Stage模型新建Static Library模块。HAR模块目录结构library/ ├── libs/ // Native库.so文件 ├── src/main/ │ ├── cpp/ // C源码 │ │ ├── types/ // Native API接口定义 │ │ ├── CMakeLists.txt │ │ └── napi_init.cpp │ ├── ets/ // ArkTS源码 │ ├── resources/ // 资源文件 │ └── module.json5 // 模块配置 ├── build-profile.json5 // 编译配置 ├── hvigorfile.ts // 构建脚本 ├── Index.ets // HAR入口文件 └── oh-package.json5 // HAR描述文件入口文件配置在oh-package.json5中通过main字段定义导出文件入口默认为Index.ets。{ main: ./src/main/ets/components/MainPage.ets }三、字节码HAR好处说明安全性降低代码泄漏风险增加反编译难度构建性能被HAP/HSP集成时减少语法检查/转换耗时内存占用减少编译时node进程占用降低内存编译效率对js语言HAR包减少编译阶段处理文件数使用场景场景说明SDK厂商对外提供SDK降低源码泄漏风险multi-repo主工程合并集成时所有HAR发布为字节码HARmono-repo代码量大的二方/三方SDK内存敏感切换字节码HAR降低内存占用底层叶子节点含有较少源码依赖的HAR约束条件约束说明依赖配置依赖需配置在本模块oh-package.json5的dependencies或dynamicDependencies中包名一致依赖名和依赖包的oh-package.json5中的name需保持一致useNormalizedOHMUrl依赖字节码HAR时工程build-profile.json5中必须为trueSDK版本字节码HAR的compatibleSdkVersion不能大于工程的compatibleSdkVersion操作步骤步骤1设置useNormalizedOHMUrl为true{ app: { products: [{ buildOption: { strictMode: { useNormalizedOHMUrl: true } } }] } }步骤2设置byteCodeHar为true{ buildOption: { arkOptions: { byteCodeHar: true } } }步骤3选择Build Mode步骤4可选开启混淆{ buildOptionSet: [{ name: release, arkOptions: { obfuscation: { ruleOptions: { enable: true, files: [./obfuscation-rules.txt] }, consumerFiles: [./consumer-rules.txt] } } }] }步骤5构建选中HAR模块根目录 → Build → Make Module module-name3.5 字节码HAR产物结构HAR包解压后包含abc字节码、resources、module.json、oh-package.json5等四、源码HARdebug模式产物包含源码、资源文件、配置文件方便本地调测。注意源码HAR包中包含源代码请谨慎分发。操作步骤设置byteCodeHar为false选择Build Mode为debug可选配置.ohpmignore或.gitignore过滤文件构建release模式从DevEco Studio NEXT Developer Beta35.0.3.600开始默认不开启混淆构建产物与debug模式相同。为保护代码资产建议开启混淆。开启混淆后产物是包含js中间码的HAR包源码混淆后生成的js中间码。五、对HAR进行签名前提条件条件说明SDK版本Compatible SDK 5.0.0(12)及以上Daemon需开启Hvigor的Daemon能力操作步骤步骤1开启签名开关// hvigor-config.json5 { properties: { ohos.sign.har: true } }步骤2配置工程签名信息步骤3构建选中HAR模块根目录 → Build → Make Module module-name签名HAR用途签名后的HAR包可用于接入生态市场SDK类商品接入。六、自定义打包文件在HAR模块的build-profile.json5中配置include或exclude字段支持glob语法。{ buildOption: { packingOptions: { asset: { include: [./src/router.json5, router.json5], exclude: [./config/*] } } } }注意include配置时node_modules、oh_modules、.preview、build、.cxx、.test不生效exclude配置时oh-package.json5不生效默认打包七、其他三种HAR产物对比产物类型包含内容适用场景安全性源码HARdebug源码、资源、配置本地调测低源码HARrelease混淆js中间码、资源、配置ohpm发布中字节码HARabc字节码、资源、配置SDK发布、生产环境高构建流程创建Static Library模块 ↓ 编写代码 配置入口文件 ↓ 选择产物类型 ├── 字节码HARbyteCodeHar: true useNormalizedOHMUrl: true └── 源码HARbyteCodeHar: false ↓ 选择Build Modedebug/release ↓ 可选开启混淆 ↓ 可选配置签名 ↓ 构建生成HAR鸿蒙HAR构建支持源码HARdebug含源码release混淆含js中间码和字节码HAR含abc字节码提升安全性默认构建字节码HAR5.0.3.800字节码HAR需设置useNormalizedOHMUrl:true和byteCodeHar:true。