HarmonyOS开发:走进静态共享包的依赖与使用

2023-10-27

前言

在上一篇,我们进行了动态共享包的开发和使用,由于动态共享包有一定的局限性,比如,调用共享包资源还得要通过工具类进行调用,再比如仅用于应用内部代码、资源的共享,如果我想要开源,以远程依赖的方式给任何一个想要用的人进行使用,动态共享包就无法实现,针对以上的种种问题,有没有办法进行解决呢?必须有,这就是今天的主角,静态共享包

静态共享包(Harmony Archive)HAR,可以包含代码、C++库、资源和配置文件,可以给一个或多个模块进行依赖使用,和动态共享包不同的是,它不能单独运行,仅仅只能作为依赖项进行使用。

静态共享包很多的使用方式和动态共享包是一致的,考虑到大多数都是首次接触到HarmonyOS开发,为了方便大家更能直观的学习和练习,这里我把静态共享包的流程,也从头至尾的阐述一遍。

本章的内容大纲如下:

1、如何创建一个静态共享包(HAR)

2、静态共享包本地依赖方式

3、静态共享包的多种调用方式

4、静态共享包混淆文件

5、总结

一、如何创建一个静态共享包(HAR)

和动态共享包一样,在当前工程项目名,右键,选择New,然后选择Module即可。

选择Static Library。

设置共享包名字,点击Finish。

和动态共享包不同的是,静态共享包的类型为har。

二、静态共享包本地依赖方式

1、工程内部依赖

工程内部依赖方式,完全和动态共享包一模一样,可以手动进行依赖或者命令方式:

手动方式一,记住格式:【"folder": "file:../folder"】

"staticlibrary": "file:../staticlibrary"

手动方式二:格式,【"@xx/xx": "file:../staticlibrary"】

"@ohos/library": "file:../staticlibrary"

引入之后,进行同步项目,点击Sync Now即可,当然了你可以可以,将鼠标放置在报错处会出现提示,在提示框中点击Run 'ohpm install'。

命令方式依赖:

命令行中或在IDE Terminal窗口中,目录进入到需要引用的模块下,执行ohpm install ../folder命令即可,folder是你的共享包,如下图所示:

命令执行完毕之后,就会自动的在oh-package.json5里添加依赖,并生成映射文件,映射到调用Module的oh_modules目录下:

2、不同工程之间依赖

以上,无论是动态共享包还是静态共享包,都是同工程之间的依赖,但是,很多场景下,为了代码上的复用,我们会有多个项目复用共享包的情况,比如网络共享包,各个工具共享包等等,那么这种方式如何实现呢?

比如,在另一个项目MyLibrary中,有一个静态共享包net,我们在Demo项目中如何使用呢,当然了,这是简单的举例,可以是任何的一个项目,或者任何的一个静态共享包,体现的就是不在一个工程下。

第一步:编译库模块

选中需要共享的静态共享包,点击菜单栏的Build > Make Module选项,如下图:

构建完成之后,在build->default->outputs->default下,就会生成一个.har文件,如下图:

第二步:在需要调用此静态共享包的项目中进行依赖

记住,使用格式【"@xx/xx": "file:../xx.har"】,否则无法进行依赖。

以上的方式,不利于团队之间协作,毕竟你的设备中有这个.har,其他人未必有,所以,为了更好了进行团队协作,还有一种简单的方式,可以把.har文件复制到项目中去,具体的目录自己定义,如下图,我创建了一个libs目录,用于存放.har文件

在上述的依赖方式中,无论是同工程,还是不同工程,在实际的开发中,都有着一定的局限性,比如,如果是同工程,那么就实现不了项目之间的复用,如果是不同工程,即便把.har复制到项目中,实现了团队协作,如果har有更新,那么还得替换,着实不便。

有没有一种类似Android中的远程Maven形式呢,可以很负责任的告诉大家,必须有,那就远程依赖方式,由于内容比较多,我们放到下一篇文档来阐述。

三、静态共享包多种调用方式

无论你是采用同工程还是不同工程,还是远程的依赖的方式,其本质的实现方式是一样的。

1、资源调用

资源调用就比较简单了,可以直接调用,不用和动态共享包那样做中转处理。

比如静态共享包中,有一个字符串资源,当然,也可以是其他的资源,比如颜色、大小、音视频等等,都可以。

其他引用到此静态共享包的模块,就可以直接调用,按照$r('app.type.name')格式,type是你自己定义的资源类型,name是你定义的资源名字,如上图的资源,我们就可以如下调用,毕竟是静态共享包,可以和当前模块的调用方式完全一样。

$r('app.string.static_name')

关于资源类型,HarmonyOS提供了多种资源类型,在前面的了解工程结构那章有详细的介绍,这里再简单罗列一下:

文件

概述

boolean.json

布尔型

color.json

颜色

float.json

浮点型

intarray.json

整型数组

integer.json

整型

pattern.json

样式

plural.json

复数形式

strarray.json

字符串数组

string.json

字符串值

media

多媒体文件,如图形、视频、音频等文件,支持的文件格式包括:.png、.gif、.mp3、.mp4等

rawfile

用于存储任意格式的原始资源文件:$rawfile('filename')"

2、方法调用

比如在静态共享包中,有一个add求和方法,代码如下,记得如果想外暴露,一定要使用关键字export。

其他引用到此静态共享包的模块就可以如下调用,直接调用add方法即可,会有提示导包,如果没有,可按照图中导包方式进行导包即可。

3、类调用

和方法调用一样,我们在静态共享包中创建一个需要暴露的类,这里我以一个日志打印类作为测试,记住凡是需要暴露给外部使用的,一定要添加关键字export。

调用方式和方法如出一辙:

4、组件调用

在静态共享包中有一个自定义的文本组件,展示的内容为:Hello staticlibrary,如下:

调用方式如下,可以直接作为视图展示:

5、跳转静态共享包中的页面

经过验证之后,HAR不支持在配置文件中声明pages页面,如果验证不对,还望大家可以进行指出。

6、注意事项

对外暴露的接口,需要在共享包入口文件index.ets中声明,否则,其他模块无法调用,都是固定的模式,比如上述的add方法,和自定义的组件等,切记!!!

同一个类中的,如果多个方法,可以复用,比如:

export { Log, add, minus } from './utils/test'

四、静态共享包混淆文件

混淆,在开发中,顾名思义,就是把易于理解的代码变成难于阅读和理解的行为,目的是为了代码的安全,避免外泄,如果仅仅是自己公司使用,确实没必要混淆,毕竟都是同一家公司,没必要做的那么苛刻,如果是作为一个开源的代码,为了自身的权益,只开放功能,而保留代码的安全,那么就可以进行混淆,当然了,凡是不能绝对,还是得具体问题具体分析。

我们先看一下未混淆前的效果,所有的源代码均可在oh_modules中清晰查看:

一起再看下混淆后的效果,变成了两个文件,由原来的Net.ts,换成了Net.d.ts和Net.js两个文件,再看源码,已无法查看到原来的样式。

如何进行混淆呢,很是简单,再需要打静态共享包的build-profile.json5文件中,增加如下的属性即可:

artifactType字段有以下两种取值,默认缺省为original。

original:不混淆。

obfuscation:混淆,目前仅支持uglify混淆。

需要注意的是,按照官方解读,artifactType字段设置为obfuscation时,apiType字段必须设置为stageMode,因为Stage模型才支持混淆。

五、总结

静态共享包解决了,多项目开发复用代码的问题,也实现了,代码功能封装直接远程使用的方便,提供了一个开源的便捷使用,这是仅应用内部代码、资源共享的动态共享包所不能比的,当然了,两种共享包,各有优缺点,如何取舍,在于自己的决策。

其实关于静态共享包.har,大家有没有发现,动态共享包在构建编译后,也会创建一个.har文件,没错,你也可以完全通过动态共享包,开发自己的静态共享包

下一篇,我们将带来静态共享包如何实现远程依赖和上传以及关于静态共享包私服的搭建,敬请期待!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HarmonyOS开发:走进静态共享包的依赖与使用 的相关文章

  • vue + ant design vue 搭配 less 动态自定义主题颜色

    今天搞了一下午 终于搞成功了 分享给大家看看 思路解析 less 提供一个 modifyVars 可以修改浏览器中 less 文件里的变量 所以我们需要在浏览器端引入 less js 需要引入一个 less 文件 其中包含要修改的变量 但是

随机推荐

  • yum install net-tools安装报错could not resolve host: mirrorlist.centos.org

    Could not retrieve mirrorlist http mirrorlist centos org release 7 arch x86 64 repo os infra stock error was 14 curl 6 C
  • 移远EC600S-CN (3) - HTTP(S)应用GET请求POST请求,HTTP接入OneNET物联网云平台

    移远EC600S CN 使用AT指令HTTP连接GET请求POST请求 并接入OneNET物联网云平台 实现HTTP对物联网设备的接入 同样也适用于 EC200S EC200S不支持QuecPython 体积比EC600S略大 但便宜很多
  • Ubuntu 命令行安装android studio

    安装 sudo apt add repository ppa paolorotolo android studio sudo apt get update sudo apt get install android studio 创建桌面快捷
  • Unity 最新UnityWebRequest下载,同时显示下载进度,和 显示网速,今天贴出来和大家分享

    Unity 最新UnityWebRequest下载网络资源 支持断点续传 多文件同时下载 同时显示下载进度 和 显示网速 今天贴出来和大家分享 显示网速图片 附上案例链接 可下载 https download csdn net downlo
  • 【代码重构 & JDT】遍历AST,获取每个节点的所有直接子节点

    public class DataNode public ASTNode node 所代表的的AST节点 public int label 编号 public List
  • ORB特征提取与匹配

    ORB特征是目前最优秀的特征提取与匹配算法之一 下面具体讲解一下 特征点的检测 图像的特征点可以简单的理解为图像中比较显著显著的点 如轮廓点 较暗区域中的亮点 较亮区域中的暗点等 ORB采用FAST features from accele
  • 【编码】使用JavaScript做中文编码转换

    背景 用git bash跑curl命令的时候 会碰到中文无法输入or无法正常工作的情况 这里介绍先把中文转码 就可以正常使用了 这里介绍JavaScript的方法 1 在url地址上的GET参数是中文时 使用 console log enc
  • Android 13 - Media框架(9)- NuPlayer::Decoder

    这一节我们将了解 NuPlayer Decoder 学习如何将 MediaCodec wrap 成一个强大的 Decoder 这一节会提前讲到 MediaCodec 相关的内容 如果看不大懂可以先跳过此篇 原先觉得 Decoder 部分简单
  • Selenium JSON通信协议

    JSON wire protocol JSONWP 是WebDriver开发者编写的一种通信机制 这个通信协议是一个预定义的特殊设置 通过RESTful API暴露标准端口 WebDriver和JSONWP目的是通过Firefox driv
  • 7-3 成绩等级

    7 3 成绩等级 给出一个成绩 要求输出成绩等级 A B C D E 90分以上为 A 80到89分为 B 70到79分为 C 60到69分为 D 60分以下为 E 输入格式 在一行输入一个整数n n lt 100 输出格式 在一行中输出成
  • 视频汇聚/视频云存储/视频监控管理平台EasyCVR添加萤石云设备详细操作来啦!

    安防视频监控 视频集中存储 云存储 磁盘阵列EasyCVR平台可拓展性强 视频能力灵活 部署轻快 可支持的主流标准协议有国标GB28181 RTSP Onvif RTMP等 以及支持厂家私有协议与SDK接入 包括海康Ehome 海大宇等设备
  • QT With OpenGL(延时着色法)(Deferred Shading)

    文章目录 1 创建G Buffer帧缓存 2 修改各类型物体的着色器 3 测试G Buffer 4 使用G Buffer生成场景 5 添加高光项 1 如果为光源物体 则不进行光照结果计算 2 对高光项进行高斯模糊 3 泛光合成 更多 光体积
  • 蓝桥杯505--数字三角形

    题目描述 上图给出了一个数字三角形 从三角形的顶部到底部有很多条不同的路径 对于每条路径 把路径上面的数加起来可以得到一个和 你的任务就是找到最大的和 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数 此外 向左
  • 【数据库课程设计】企业库存管理系统

    作者 何翔 学院 计算机学院 学号 04191315 班级 软件1903 完整资料 https download csdn net download HXBest 72361220
  • 开发板连续显示图片

    本文分享自中移OneOS微信公众号 万耦中的二次元世界 作者 小M哥 BAD APPLE原本是东方游戏里的一首歌曲 后来被加了一个MAD 由于MAD非常惊艳华丽 使得BAD APPLE被大家喜爱 在程序员圈子里 有一个传言 有屏幕的地方 就
  • 性能测试怎么做?性能测试重点和各项性能测试流程(超级详细)

    前言 性能测试基础 1 性能测试一般分为 负载测试 压力测试 基准测试 稳定性测试 扩展性测试 2 常见的性能测试指标 响应时间 TPS QPS 并发用户 PV UV 点击率 吞吐量 资源开销 3 性能测试的场景 业务场景 系统的业务处理流
  • windows添加开机启动项

    我们时常会需要开机就启动一些软件 例如飞鸽 微信等等 windows添加开机启动项有很多种 例如 添加到 启动 文件夹 添加到注册表 使用任务计划程序 以下只列举第一种 添加到启动文件夹 测试环境为Win 10 解决方案 1 按下 Win
  • python中判断类型函数isinstance()

    函数isinstance 可以判断一个变量的类型 既可以用在Python内置的数据类型如str list dict 也可以用在我们自定义的类 它们本质上都是数据类型 假设有如下的 Person Man和 Woman的定义及继承关系如下 cl
  • gradle 任务依赖实现复制任务。

    近期遇到一个需求 由于很少研究gradle相关 所以在实现上卡了一阵子 现已基本实现需求 回过头来记录一下 需求 项目中接入腾讯bugly 使用其热更新功能 由于热更新目前不支持自定义补丁包的生成路径 因此会产生一个问题就是 补丁包生成后位
  • HarmonyOS开发:走进静态共享包的依赖与使用

    前言 在上一篇 我们进行了动态共享包的开发和使用 由于动态共享包有一定的局限性 比如 调用共享包资源还得要通过工具类进行调用 再比如仅用于应用内部代码 资源的共享 如果我想要开源 以远程依赖的方式给任何一个想要用的人进行使用 动态共享包就无