首页 > 编程语言 >鸿蒙如何打包应用程序

鸿蒙如何打包应用程序

时间:2024-07-01 14:30:37浏览次数:3  
标签:node NODE 鸿蒙 应用程序 ohpm PATH HOME 打包 SDK

总结鸿蒙应用程序包

之前文章详细讲解了关于三种程序包的内容,现在简单总结一下:

1. 总结

  • 首先需要搞清楚鸿蒙项目的模块Module的分类: Module分为“Ability”“Library”两种类型

  • HAP

    1. HAP: Harmony Ability Package , 叫做鸿蒙Ability包。

    2. “Ability”类型的Module编译后叫做HAP。

    3. 一个HAP , 它是由代码、资源、第三方库及应用/服务配置文件组成,HAP可以分为Entry和Feature两种类型。

    4. Entry是主模块 , Feature是动态特性模块。

  • HAR

    1. HAR: Harmony Archive /ˈɑːkaɪv/, 叫做鸿蒙静态共享包。

    2. “Library”类型的Module编译后叫做HAR , 或者 HSP。

    3. 一个HAR , 它可以包含代码、C++库、资源和配置文件。

    4. HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。

  • HSP

    1. HSP: Harmony Shared Package , 叫做鸿蒙动态共享包。

    2. 一个HSP , 它可以包含代码、C++库、资源和配置文件。

    3. HSP依然不能独立运行 , 需要作为HAP的依赖项。

    4. HSP不同于HAR , 可以被多个HAP同时引用 , HSP旨在解决多个模块引用相同的HAR,导致APP包大小膨胀的问题。

2. 其它问题

2.1. 都是资源包,hsp和har有什么不一样?

解决多个多个hap引用相同的har包会出现多次重复拷贝,导致app包体积膨胀的问题,(har是安装包直接安装在进程里)。

2.2. 程序怎么打包

2.2.1. 使用编译器打包

一般应用直接使用DevEco进行打包即可: Build -> Hap(s),如图:

2.2.2. 单独编写脚本打包
  • 如果此应用针对不同应用市场 , 有不同的调整 , 比如应用闪屏 , 那么就需要使用脚本打包

    • 具体介绍:

      • 除了使用DevEco Studio一键式构建应用/服务外,还可以使用命令行工具来调用Hvigor任务进行构建

      • 首选需要搭建构建环境 , 安装node.js , jdk , sdkmgr

      • 配置sdk环境变量

      • 最终编写打包脚本: ./hvigorw clean assembleApp --no-daemon

    • 以上所有的步骤 , 都可以通过脚本来处理

      #!/bin/bash
      set -ex
      ​
      NODE_HOME=xxx #指定Node.js的安装目录
      JAVA_HOME=xxx #指定JDK的安装目录
      COMMANDLINE_TOOL_DIR=xxx #命令行工具的安装目录
      HOS_SDK_HOME=xxx #HarmonyOS SDK根路径
      ​
      #下载并配置Node.js
      function init_Node() {
        if [ ! -d "${NODE_HOME}" ]; then 
           mkdir "${NODE_HOME}"
        fi
        cd ${NODE_HOME}
        wget --no-check-certificate -q "${node下载路径}" -O node-linux.tar.xz #下载node,需要替换node下载路径
        tar -vxf node-linux.tar.xz
        NODE_DIR=xxx #node压缩包文件里面的目录
        cd ${NODE_DIR}
        mv -f ./* .[^.]* ../
        cd ..
        rm -rf NODE_DIR node-linux.tar.xz
        export NODE_HOME=${NODE_HOME}
        export PATH=$NODE_HOME/bin:$PATH
        node -v
        npm config set registry=https://repo.huaweicloud.com/repository/npm/
        npm config set @ohos:registry=https://repo.harmonyos.com/npm/
        
        
        
        npm config get @ohos:registry
        npm config set proxy=http://user:[email protected]:port #配置npm http代理,企业网络受限的情况下需要配置
        npm config set https-proxy=http://user:[email protected]:port #配置npm https代理,企业网络受限的情况下需要配置
        npm info express
      }
      ​
      #下载并配置JDK
      function init_JDK() {
        if [ ! -d "${JAVA_HOME}" ]; then 
           mkdir "${JAVA_HOME}"
        fi
        cd ${JAVA_HOME}
        wget --no-check-certificate -q "${jdk下载路径}" -O jdk-linux.tar.xz #下载jdk,需要替换jdk下载路径
        tar -vxf jdk-linux.tar.xz
        JDK_DIR=xxx #jdk压缩包文件里面的目录
        cd ${JDK_DIR}
        mv -f ./* .[^.]* ../
        cd ..
        rm -rf JDK_DIR jdk-linux.tar.xz
        export JAVA_HOME=${JAVA_HOME}
        export PATH=$JAVA_HOME/bin:$PATH
        java -version
      }
      ​
       
      #配置SDK(已获取离线SDK并解压完成)
      function init_SDK() {
        export HDC_HOME=/opt/HarmonyOS/SDK/openharmony/10/toolchains #设置hdc工具的环境变量,hdc工具在toolchains所在路径下,请以实际路径为准
        export PATH=$HDC_HOME:$PATH
        export OHOS_NATIVE_HOME=/opt/HarmonyOS/SDK/openharmony/10/native #如果工程中涉及C/C++,才需要设置,指向Native SDK所在的目录
        export HOS_SDK_HOME=${HOS_SDK_HOME}
      }
      # 安装ohpm, 若镜像中已存在ohpm,则无需重新安装
      function init_ohpm() {
          # 初始化ohpm
          OHPM_HOME=${COMMANDLINE_TOOL_DIR}/command-line-tools/ohpm
          export PATH=${OHPM_HOME}/bin:$PATH
          ohpm -v
          # 配置ohpm仓库地址
          
          
          ohpm config set registry=https://ohpm.openharmony.cn/ohpm/
      }
      ​
      # 初始化相关路径
      PROJECT_PATH=xxx  # 工程目录
      # 进入package目录安装依赖
      function ohpm_install {
          cd $1
          ohpm install
      }
      # 环境适配
      function buildHAP() {
          # 根据业务情况适配local.properties
          cd ${PROJECT_PATH}
          echo "hwsdk.dir=${HOS_SDK_HOME}"  > ./local.properties
          # 根据业务情况安装ohpm三方库依赖
          ohpm_install "${PROJECT_PATH}"
          ohpm_install "${PROJECT_PATH}/entry"
          ohpm_install "${PROJECT_PATH}/xxx"
          # 如果构建过程报错 ERR_PNPM_OUTDATED_LOCKFILE,需要增加配置:lockfile=false, 根据node版本选择设置方式:
          # node.version<18
          npm config set lockfile=false # 如果执行此命令报错,建议直接在镜像的.npmrc文件中需要增加一行配置:lockfile=false
          # node.version>=18
          #cat ${HOME}/.npmrc | grep 'lockfile=false' || echo 'lockfile=false' >> ${HOME}/.npmrc
          # 根据业务情况,采用对应的构建命令,可以参考IDE构建日志中的命令
          cd ${PROJECT_PATH}
          chmod +x hvigorw
          ./hvigorw clean --no-daemon
          ./hvigorw assembleHap --mode module -p product=default -p debuggable=false --no-daemon # 流水线构建命令建议末尾加上--no-daemon
      }
      function install_hap() {
          hdc file send "${PROJECT_PATH}/entry/build/default/outputs/default/entry-default-signed.hap" "data/local/tmp/entry-default-signed.hap"
          hdc shell bm install -p "data/local/tmp/entry-default-signed.hap" 
          hdc shell rm -rf "data/local/tmp/entry-default-signed.hap"
          hdc shell aa start -a MainAbility -b com.example.myapplication -m entry
      }
      ​
      # 使用ohpm发布har
      function upload_har {
        ohpm publish pkg.har
      }
      ​
      function main {
        local startTime=$(date '+%s')
        init_Node
        init_JDK
        init_SDK
        init_ohpm
        buildHAP
        install_hap
        upload_har
        local endTime=$(date '+%s')
        local elapsedTime=$(expr $endTime - $startTime)
        echo "build success in ${elapsedTime}s..."
      }
      

  • 参考链接: 文档中心

标签:node,NODE,鸿蒙,应用程序,ohpm,PATH,HOME,打包,SDK
From: https://blog.csdn.net/m0_68038853/article/details/140078462

相关文章

  • 有关paddleocr在pyinstall中打包问题的解决方案
    借鉴网址python解决paddleocr打包问题_pyinstaller怎么解决paddleocr中的动态导入-CSDN博客在打包时我使用的spec文件如下:(需要将pathe和binaries换为自己的paddleocr路径)block_cipher=Nonea=Analysis(['main.py'],   pathex=['E:\\PyEnviroment\\Lib\\site-packages\\p......
  • Vite 打包如何允许存在commonjs
    首先安装依赖:npminstall@rollup/plugin-commonjs如图所示,添加plugin插件 示例代码:import{resolve}from'path';import{defineConfig}from'vite';importvuefrom'@vitejs/plugin-vue';importvueJsxfrom'@vitejs/plugin-vue-jsx&......
  • 用pipenv解决pyinstaller打包文件过大的问题
    学会用pyinstaller打包python文件后,我发现直接大暴出来的文件内存特别大于是我上网搜了一些压缩方法,试过用upx,用了之后感觉有点麻烦,后面又看到了pipenv,感觉还不错首先用windows+r快捷键输入cmd打开命令管理器安装pipenv模块pipinstallpipenv-ihttps://pypi.tuna.tsinghua.......
  • 鸿蒙应用开发 && 打包与上架 [ 非常详细的保姆教程 ]
    1,准备阶段1.1 当我们鸿蒙项目开发之后就要开始,这个时候我们去AppGalleryConnect申请上架,华为审核通过后,用户即可在华为应用市场获取您的HarmonyOS应用/元服务。1.2  HarmonyOS会通过数字证书与Profile文件等签名信息来保证应用的完整性,需要上架的HarmonyOS应用/元服......
  • 纯血版!“一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发者学习路径!
    前言最新数据显示,在中国智能手机市场,鸿蒙操作系统的份额达到10%,鸿蒙开发者数量更是超过240万,鸿蒙生态已经与iOS、安卓形成了“三分天下”的格局,成为当下的风口。如今,为了抢占巨大的鸿蒙市场,Top20移动互联网公司中有半数已经启动了鸿蒙原生应用开发,其中包括支付宝、美团等各......
  • 鸿蒙开发之音乐收藏界面
    一、项目概述本项目是基于ArkTS环境编写QQ音乐的收藏歌曲的页面,结构也偏简单。适合新手参考。以下是预览图及其结构图:二、项目分解因为这个页面自定义小组件比较多,所以也抽取一部分以简写代码,整个页面用Tab组件包装。其中又分为歌曲列表部分和搜索栏,还有底部的歌单播放列表......
  • 鸿蒙开发实践项目——商城列表
     一、项目概述在ArkTS环境中运用各个组件简单构建一个商城列表的页面,要求熟练掌握基本组件的用法以及灵活运用的程度。同时页面布局较为简单,适用于鸿蒙开发的新手的实践项目。总体构建页面最终如下:二、项目结构根据预览图可先构建出一副构架图。同时因为所需编写的代码比......
  • windows批处理问题打包
    一.需求1.文件夹Several里有一个Main.CMD文件,和其他文件夹;2.需要用Python,把Several文件夹里的文件全部打包成一个可以执行的exe文件,双击打包之后的EXE文件,就能去执行Main.CMD二.解决方案用python来做为了实现你的需求,你可以使用PyInstaller来打包Python脚本和Several文......
  • 【Python3.8.10打包exe】【Windows】
    Python3.8.10打包exe打包命令pyinstaller-Fxxx.py查看Package及版本号piplist查看Python版本号python-V打包需要用的Package及版本#python版本#3.8.10#wheel版本#0.43.0#pyinstaller版本#6.8.0常用链接chatgptPython标准库—Python3.8.19文档PyPI......
  • 华为HDC开发者大会鸿蒙进展超预期
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点在数字化浪潮的推动下,华为鸿蒙系统(HarmonyOS)以其革命性的创新,引领着全球科技的新趋势。2024年华为开发者大会(HDC2024)上,华为揭开了HarmonyOSNEXT的神秘面纱,标志着"......