鸿蒙如何打包应用程序

总结鸿蒙应用程序包

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

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}"ficd ${NODE_HOME}wget --no-check-certificate -q "${node下载路径}" -O node-linux.tar.xz #下载node,需要替换node下载路径tar -vxf node-linux.tar.xzNODE_DIR=xxx #node压缩包文件里面的目录cd ${NODE_DIR}mv -f ./* .[^.]* ../cd ..rm -rf NODE_DIR node-linux.tar.xzexport NODE_HOME=${NODE_HOME}export PATH=$NODE_HOME/bin:$PATHnode -vnpm config set registry=https://repo.huaweicloud.com/repository/npm/npm config set @ohos:registry=https://repo.harmonyos.com/npm/npm config get @ohos:registrynpm config set proxy=http://user:password@proxy.server.com:port #配置npm http代理,企业网络受限的情况下需要配置npm config set https-proxy=http://user:password@proxy.server.com:port #配置npm https代理,企业网络受限的情况下需要配置npm info express
      }
      ​
      #下载并配置JDK
      function init_JDK() {if [ ! -d "${JAVA_HOME}" ]; then mkdir "${JAVA_HOME}"ficd ${JAVA_HOME}wget --no-check-certificate -q "${jdk下载路径}" -O jdk-linux.tar.xz #下载jdk,需要替换jdk下载路径tar -vxf jdk-linux.tar.xzJDK_DIR=xxx #jdk压缩包文件里面的目录cd ${JDK_DIR}mv -f ./* .[^.]* ../cd ..rm -rf JDK_DIR jdk-linux.tar.xzexport JAVA_HOME=${JAVA_HOME}export PATH=$JAVA_HOME/bin:$PATHjava -version
      }
      ​#配置SDK(已获取离线SDK并解压完成)
      function init_SDK() {export HDC_HOME=/opt/HarmonyOS/SDK/openharmony/10/toolchains #设置hdc工具的环境变量,hdc工具在toolchains所在路径下,请以实际路径为准export PATH=$HDC_HOME:$PATHexport 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() {# 初始化ohpmOHPM_HOME=${COMMANDLINE_TOOL_DIR}/command-line-tools/ohpmexport PATH=${OHPM_HOME}/bin:$PATHohpm -v# 配置ohpm仓库地址ohpm config set registry=https://ohpm.openharmony.cn/ohpm/
      }
      ​
      # 初始化相关路径
      PROJECT_PATH=xxx  # 工程目录
      # 进入package目录安装依赖
      function ohpm_install {cd $1ohpm install
      }
      # 环境适配
      function buildHAP() {# 根据业务情况适配local.propertiescd ${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<18npm 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_Nodeinit_JDKinit_SDKinit_ohpmbuildHAPinstall_hapupload_harlocal endTime=$(date '+%s')local elapsedTime=$(expr $endTime - $startTime)echo "build success in ${elapsedTime}s..."
      }
      

  • 参考链接: 文档中心

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/365382.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI大模型】跌倒监控与健康:技术实践及如何改变未来

文章目录 1. **背景与意义**2. **关键技术与方法**2.1 传感器数据融合2.2 深度学习模型2.3 行为模式识别2.4 预测与预防 3. **应用场景**3.1 老年人跌倒预警3.2 康复患者监测3.3 高风险职业防护 4. **实践案例**案例1&#xff1a;某老年社区的跌倒预警系统案例2&#xff1a;康复…

C++ 几何算法 打印图案 1*2*5*6 –3*4(Geometric Algorithms Print the pattern 1*2*5*6 –3*4)

给定整数 N&#xff0c;任务是打印一个倒三角形&#xff0c;其中左半部分由 [1, N*(N1)/2] 范围内的元素组成&#xff0c;右半部分由 [N*(N1)/2 1, N*(N1)] 范围内的元素组成。 例子&#xff1a; 输入&#xff1a; N 3 输出&#xff1a; 1*2*3*10*11*12 4*5*8*9 …

业务模型扩展字段存储

构建业务模型时&#xff0c;通常模型会设置扩展信息&#xff0c;存储上一般使用JSON格式存储到db中。JSON虽然有较好的扩展性&#xff0c;但并没有结构化存储的类型和非空等约束&#xff0c;且强依赖代码中写入/读取时进行序列化/反序列化操作&#xff0c; 当扩展信息结构简单且…

webStorm debug vue项目的两种方案

一、前言 本文将介绍通过webstorm对vue项目进行debugger调试的两种方案。 但是&#xff0c;不管通过那种方案&#xff0c;都无法达到类似后端idea调试的体验&#xff0c;感觉十分难受&#xff0c;不过&#xff0c;比起用console.log还是好一些。如果各位有更好的方案&#xf…

贪心问题(POJ1700/1017/1065)(C++)

一、贪心问题 贪心算法 贪心算法&#xff08;greedy algorithm&#xff09;&#xff0c;是用计算机来模拟一个「贪心」的人做出决策的过程。这个人十分贪婪&#xff0c;每一步行动总是按某种指标选取最优的操作。而且他目光短浅&#xff0c;总是只看眼前&#xff0c;并不考虑…

nacos漏洞

Alibaba Nacos是阿里巴巴推出来的一个新开源项目&#xff0c;是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。致力于帮助发现、配置和管理微服务。Nacos提供了一组简单易用的特性集&#xff0c;可以快速实现动态服务发现、服务配置、服务元数据及流量管理…

nginx架构学习

前言 这篇文章主要记录下对nginx架构的学习记录。 架构设计 优秀的模块化设计 高度模块化的设计是Nginx的架构基础。在Nginx中&#xff0c;除了少量的核心代码&#xff0c;其他一切皆 为模块。 在这5种模块中&#xff0c;配置模块与核心模块都是与Nginx框架密切相关的&…

【Python】利用代理IP爬取当当网数据做数据分析

前言 在数字化浪潮的推动下&#xff0c;电商平台已经彻底改变了我们的购物方式。从简单的在线交易到复杂的用户交互&#xff0c;电商平台积累了海量的用户数据。这些数据&#xff0c;如同隐藏在深海中的宝藏&#xff0c;等待着被发掘和利用。通过分析用户的浏览、搜索、购买等行…

华为RH2288H V2服务器,远程端口安装Linux操作系统

1、管理口 每台服务器的管理口不一样的&#xff0c;假如我的管理IP地址为&#xff1a;192.168.111.201 使用网线&#xff0c;将管理口和自己电脑连接起来&#xff0c;自己ip地址设置成和管理ip同一网段。 使用 ie 浏览器&#xff0c;如果是Edge&#xff0c;必须在Internet Exp…

基于局域网下的服务器连接、文件传输以及内网穿透教程 | 服务器连接ssh | 服务器文件传输scp | 内网穿透frp | 研究生入学必备 | 深度学习必备

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;本篇博客分享的是基于局域网下的服务器连接&#x1f517;、文件传输以及内网穿透教程&#xff0c;内容非常完备✨&#xff0c;涵盖了在服务器上做深度学…

Mojo — 适用于所有人工智能开发人员的编程语言

Mojo语言是一个由人工智能公司Modular推出的全新编程语言&#xff0c;专为AI开发者设计。Mojo的语法与Python相似&#xff0c;但结合了Python的易用性和C语言的高性能&#xff0c;旨在解锁AI硬件的可编程性和AI模型的可扩展性。 Modular这个公司则是一个非常年轻的新生AI创业公…

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

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

第三方服务提供商的五大风险

亚马逊如何应对网络安全挑战 关键网络安全统计数据和趋势 移动优先世界中安全和隐私策略 当今数字时代网络安全的重要性 用户无法停止犯安全错误的 3 个原因 首席安全官可能过于依赖 EDR/XDR 防御 随着业务流程变得越来越复杂&#xff0c;公司开始转向第三方来提高其提供关…

观察者模式在金融业务中的应用及其框架实现

引言 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;使得多个观察者对象同时监听某一个主题对象。当这个主题对象发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新。…

Web后端开发之前后端交互

http协议 http ● 超文本传输协议 &#xff08;HyperText Transfer Protocol&#xff09;服务器传输超文本到本地浏览器的传送协议 是互联网上应用最为流行的一种网络协议,用于定义客户端浏览器和服务器之间交换数据的过程。 HTTP是一个基于TCP/IP通信协议来传递数据. HTT…

Transformer详解encoder

目录 1. Input Embedding 2. Positional Encoding 3. Multi-Head Attention 4. Add & Norm 5. Feedforward Add & Norm 6.代码展示 &#xff08;1&#xff09;layer_norm &#xff08;2&#xff09;encoder_layer1 最近刚好梳理了下transformer&#xff0c;今…

文件系统(操作系统实验)

实验内容 &#xff08;1&#xff09;在内存中开辟一个虚拟磁盘空间作为文件存储器&#xff0c; 在其上实现一个简单单用户文件系统。 在退出这个文件系统时&#xff0c;应将改虚拟文件系统保存到磁盘上&#xff0c; 以便下次可以将其恢复到内存的虚拟空间中。 &#xff08;2&…

MySQL-java连接MySQL数据库+JDBC的使用

目录 1.准备所需要资源 2.导入驱动包 3.连接数据库步骤 首先在MySQL中创建好数据库和表 代码实现连接数据库 1.准备所需要资源 1.mysql和驱动包 我用的是5.7的mysql和5.1.49的驱动包&#xff0c;链接放在网盘里&#xff0c;需要的自取 链接&#xff1a;https://pan.bai…

二轴机器人装箱机:重塑物流效率,精准灵活,引领未来装箱新潮流

在现代化物流领域&#xff0c;高效、精准与灵活性无疑是各大企业追求的核心目标。而在这个日益追求自动化的时代&#xff0c;二轴机器人装箱机凭借其较佳的性能和出色的表现&#xff0c;正逐渐成为装箱作业的得力助手&#xff0c;引领着未来装箱新潮流。 一、高效&#xff1a;重…

【自动化测试】Selenium自动化测试框架 | 相关介绍 | Selenium + Java环境搭建 | 常用API的使用

文章目录 自动化测试一、selenium1.相关介绍1.Selenium IDE2.Webdriverwebdriver的工作原理&#xff1a; 3.selenium Grid 2.Selenium Java环境搭建3.常用API的使用1.定位元素2.操作测试对象3.添加等待4.打印信息5.浏览器的操作6.键盘事件7.鼠标事件8.定位一组元素9.多层框架定…