当看到 deveco studio 3.1 release | 动态共享包开发,编译更快,包更小这篇文章时,就马上想动手写一个 demo,把平常工作写后端结构搬上来。
从 0 开始写一个动态共享包 demo 有点费时,于是在 codelabs 看到一个关系型数据库(arkts)的 sample,就想着在这基础上,把数据库表操作,抽到动态共享包模块,然后在 entry 模块上引入使用。
到这里可能有小伙伴有疑问?其实用静态共享包把数据库表操作抽出来,在 entry 模块上引入使用,对的,这样也是可以达到分离。
但如果有部分公共的资源和代码,只能在开发静态共享,并且打包到每个依赖的 hap 里,这样导致包体积较大,且有重复多份公共资源和代码重复打包到应用中。
如果使用动态共享,可以减少包体积,让多个 hap 能够共享同一公共资源代码。
应用内动态共享包指的是专门为某一应用开发的动态共享包,只能被该应用内部其他 hap/hsp 使用,用于应用内部代码、资源的共享。
应用内 hsp 跟随其宿主应用的 app 包一起发布,与该宿主应用具有相同的包名和生命周期。
下面先看看这个账目记录 demo 的效果图:
知识点
关系型数据库:
https://developer.harmonyos.com/cn/docs/documentation/doc-references-v3/js-apis-data-relationalstore-0000001493744128-v3?catalogversion=v3开发及引用动态共享包:https://developer.harmonyos.com/cn/docs/documentation/doc-guides-v3/hsp-0000001521396322-v3?catalogversion=v3项目结构图:
动态共享包结构图:
页面逻辑结构图:
讲解
①动态共享包创建、开发与导出
创建动态共享包具体操作参考官方文档:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides-v3/hsp-0000001521396322-v3?catalogversion=v3
开发按照业务逻辑编写相应代码就行。
导出业务接口,给其它地方引用使用,在 index.ets 文件编写导出内容,如下:
export { accounttable } from ./database/tables/accounttableexport { accountdata } from ./bean/accountdataexport { accountitem } from ./bean/accountitemexport { logger } from ./utils/logger
编译动态共享包,参考 1.1 官方文档链接,通过 deveco studio 菜单栏的 build > make module ${libraryname} 进行编译构建,生成 hsp。
②entry 模块引入使用
在使用方 entry/feature 模块的 oh-package.json5 文件中添加 hsp 模块引用,以引用名为 sharedlibrary 的 hsp 为例:
{ ... dependencies: { @ohos/db_library: file:../db_library }}
运行引用 hsp 的使用方模块,单击 run > edit configurations,选择 deploy multi hap 标签页,勾选 deploy multi hap packages,选择使用方模块(如 entry)和 hsp 模块(如sharedlibrary),点击 ok。
单击 run > run’模块名称’(如 run ‘entry’)或 deveco studio 会启动应用/服务的编译构建,完成后应用/服务即可运行在本地真机或模拟器上。
总结
体验了一番动态共享包实例,感觉太爽了,不用把全部代码都写在 entry 模块里,同时也节省了 app 的大小,目前应用内 hsp 指的是专门为某一应用开发的 hsp,只能被该应用内部其他 hap/hsp 使用,用于应用内部代码、资源的共享。
应用内 hsp 跟随其宿主应用的 app 包一起发布,与该宿主应用具有相同的包名和生命周期。遗憾当前暂不支持跨应用共享包,还有引用动态共享包后,预览器不支持。
资料文件是源代码,感兴趣小伙伴可以下载来体验一下,约束与限制如下:
①本示例仅支持标准系统上运行,支持设备:华为手机 3.1 系统或运行在 deveco studio 上的华为手机远程模拟器 api9。
②本示例为 stage 模型,支持 api version 9 及以上版本 sdk。
③本示例需要使用 deveco studio 3.1 release 及以上版本进行编译运行。
如何构建远程使用littleBits的操作音频振荡器
集成音圈电机人脸识别系统的智能电梯被大力用于老旧小区改装
关于两款国产车的底盘深度解析
中兴天机Axon 10s Pro,采用LPDDR5内存+UFS3.0闪存
智能型卫星电源V-T曲线控制系统设计方案
鸿蒙上写一个账目记录Demo
基于石墨负极的锂离子电池性能研究
通用串行总线脑电信号采集电路设计
M1芯片Mac用户报告SSD固态硬盘存在过度损耗问题
不同数据接口,一样芯片安全
RT9173B应用电路及参数资料
IPv6进阶:IPv6过渡技术之NAT64(IPv4节点主动访问IPv6节点)
我们该怎样做好LED显示屏的散热
质量流量计的应用问题及常见错误代码情况下的故障及处理说明
回顾智能音箱的结构和制作教程
Vuzix即将发布一款新AR头显可以翻译12种语言成为一款杀手级应用
触宝发布了2019年第三季度财务业绩报告实现了净收入3127万美元
骨传导耳机哪个品牌比较好?好的骨传导耳机推荐
贴片元件封装说明
中大尺寸产品销售收入增加 莱宝高科去年净利同比增长25.30%