通过实例学习鸿蒙静态库的创建与使用

简介: 通过实例学习鸿蒙静态库的创建与使用

简要介绍

静态共享包HAR(Harmony Archive),是为了实现代码和资源的共享,可以包含代码、C++库、资源和配置文件,随使用方一起编译,如果在多个应用中进行调用,就需要有多个HAR,和应用绑定在一起,是一对一的关系。

为了从零开始熟悉静态共享包,我们通过简单的实例,学习一下具体的创建过程和使用方法。

具体实现

1、新建主工程

新建一个普通的HarmonyOS工程,选择Application -> Empty Ability -> Model(Stage),开发工具不允许直接新建static library工程,个人猜测可能就是因为静态库必须和应用本身绑定在一起的缘故。

单独的工程目录结构如下,当前的模块目录是entry目录,字体加粗显示,

2、建立静态库

右击工程名,选择New -> Module…,选择Static Library,

模块创建完成后,工程结构如下图,staticlibrary工程目录名粗体显示,

我们观察staticlibrary模块下的module.json5文件,发现对应的type值为har,代表静态库,主工程的type类型值为entry,而动态库的type值官方定义为shared。本人对type值的定义感觉有点别扭,静态库和动态库的type的定义不太对应,静态库type定义为har了,动态库type为什么不能定义为hsp,或者动态库type定义为了shared,静态库type为什么不能定义为static?而是现在这种,静态库type为har,动态库type为shared,其实这些都不重要,记住就行了,也不需要手动经常改。

3、对多种形式的封装

查了一下文档,HAR支持ArkUI组件、接口和资源这三种形式的封装,所以逐一测试一下。基本方法相同,首先是在属于提供方的模块中,实现模块功能,并在index.ets中进行导出export操作,然后在使用方的应用page页面中进行导入import操作。

HAR对ArkUI组件的支持

功能实现:

MainPage.ets:

@Component
export struct MainPage {
  @State message: string = 'Hello Har'
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .fontColor(Color.Red)
      }
      .width('100%')
    }
    .height('30%')
  }
}

模块导出:

Index.ets:

export { MainPage } from './src/main/ets/components/mainpage/MainPage'

模块导入:

导入har,或者引用HAR前,需要先配置对HAR的依赖,打开entry主模块下的oh-package.json5文件,因为我们是在主模块中要引用静态库,所以我们修改模块级依赖配置文件oh-package.json5,dependencies下添加新建的库,后面file:…/跟着的是工程目录树中静态库的名称staticlibrary。

我们在主模块页面index.ets中引入静态库的组件。

import { MainPage } from "@ohos/library"
@Entry
@Component
struct Index {
  @State message: string = 'This is entry'
  build() {
    Row() {
      Column() {
        MainPage()
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}

现在基本完成了,编译看看效果,可以先编译静态库,在项目树中选择staticlibrary,然后点击菜单栏中的build,会看到第一个菜单为 Make Module ‘staticlibrary’,执行后,我们发现在工程代码目录staticlibrary\build\default\outputs\default下有一个staticlibrary.har文件,说明编译成功。

我们再选中entry,然后点击菜单栏中的build,会看到第一个菜单为 Make Module ‘entry’,执行后,我们发现在工程代码目录entry\build\default\outputs\default下有一个entry-default-unsigned.hap文件,说明也编译成功了。

我们通过预览器查看一下界面。

我们再通过模拟器查看一下运行效果。

模拟器中成功运行,说明我们通过entry中调用staticlibrary操作成功。

HAR对ArkUI接口的支持

功能实现:

MainInterface.ets:

export class TitleManager {
  static getTitle() {
    return "100以内随机数:";
  }
}
export function getRandomNum() {
  return Math.floor(Math.random() * 100);
}

模块导出:

Index.ets:

export { TitleManager } from './src/main/ts/MainInterface'
export { getRandomNum } from './src/main/ts/MainInterface'

模块导入:

由于我们是放在同一个har包中,所以不用重新配置对HAR的依赖。直接在页面文件中引入静态库中的接口。

InterfaceCaller.ets:

import { TitleManager, getRandomNum } from "@ohos/library"
@Entry
@Component
struct InterfaceCaller {
  build() {
    Column() {
      Row() {
        Text(TitleManager.getTitle())
          .fontSize(30)
        Text(getRandomNum().toString())
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
      .height('100%')
      .justifyContent(FlexAlign.Center)
      .padding(20)
    }
    .height('100%')
  }
}

我们通过预览器查看一下界面。

HAR对ArkUI资源的支持

功能实现:

直接编辑staticlibrary下的resources/base/element/和media下的资源文件即可。

String.json:

{
  "string": [
    {
      "name": "page_show",
      "value": "page from npm package"
    }
  ]
}

Har.png:

模块导出:

不需要在Index.ets中做导出操作,HAP模块编译时会自动从依赖的模块中收集资源文件。

模块导入:

由于我们是放在同一个har包中,所以不用重新配置对HAR的依赖。

对于资源文件不需要在页面文件中显式的执行导入操作。

ResourceCaller.ets:

@Entry
@Component
struct ResourceCaller {
  build() {
    Row() {
      Column() {
        Text($r('app.string.page_show'))
          .fontSize(30)
          .padding(20)
        Image($r("app.media.har"))
          .width(100)
          .objectFit(ImageFit.Contain)
      }
      .width('100%')
      .height('100%')
      .justifyContent(FlexAlign.Center)
      .padding(20)
    }
    .height('100%')
  }
}

我们通过预览器查看一下界面。

至此,我们基本实践了HAR包支持的三种形式。

经验总结

以前感觉HAR很陌生,这次通过对概念的了解,知道了其作用,并通过实例动手操作,完全掌握了HAR静态库的开发和使用,对基本使用方法有了详细的了解,相信在以后读开源代码时,能够分清静态库和动态库了。


相关内容拓展:(技术前沿)

开发语言作为软件搭建的底层,长久以来一直使用英文编程,Java、C 等语言对于专业程序员来说并不难,然而许多非 IT 专业的人,希望搭建出适合自己使用的软件,却被晦涩难懂的英文编程阻拦在外。

所幸的是,自 2000 年以来,低代码领域虽然在夹缝中艰难生存,但是经历 20 年风雨,如今却已柳木成荫,相关领域企业超过百家,近年如火如荼的“JNPF 平台”更是低代码界的一匹黑马。

JNPF 平台由具备 10 多年系统开发经验和企业项目交付经验的技术团队倾力打造而成的企业级低代码平台。支持多国语言切换搭建界面,业务流程只需要“拖拉拽”方式、少量或完全不需要编写代码即可搭建,操作起来就像搭积木一样简单,会玩电脑就可以开发软件。

核心功能:表单引擎、可视化引擎、BI引擎、流程引擎、权限引擎、门户引擎、大屏引擎、接口中心、物联平台

如果那你未曾尝试过这个领域,你或许可以试试看!官网:https://www.jnpfsoft.com/?csdn

相关文章
|
4月前
|
定位技术 开发者 智能硬件
鸿蒙5开发宝藏案例分享---一多开发实例(地图导航)
这篇文章详细解析了鸿蒙开发中的“一多”地图导航案例,展示了如何用一套代码实现多端适配(手机、折叠屏、平板等)。通过首页智能面板、路线规划页、服务卡片和实况窗四大核心场景,结合ArkUI框架,实现布局自适应与交互优化。文中提供了关键代码片段,解决手势冲突、断点监听等问题,并附带新手避坑指南和学习路径。适合开发者深入了解鸿蒙“一次开发多端部署”的实战技巧。
|
4月前
|
编解码 数据可视化 开发者
鸿蒙5开发宝藏案例分享---一多开发实例(旅行订票)
发现鸿蒙开发中的旅行订票多端实例解析!通过一套代码实现手机、折叠屏、平板和PC的智能布局适配。案例涵盖首页动态响应、时间选择的空间优化及订单页变形设计,还有断点监听、手势处理等避坑指南。官方文档中还隐藏更多实用案例,如短视频播放器、新闻分栏布局等,值得深入探索交流。
|
4月前
|
传感器 数据管理 定位技术
鸿蒙5开发宝藏案例分享---一多开发实例(游戏)
这篇文章为开发者揭示了鸿蒙系统中的隐藏宝藏——官方提供的高质量开发案例。通过这些案例,可以大幅提升开发效率,轻松实现分布式游戏、跨端协同等功能。文中详细介绍了四个实战案例:用手机作为电视游戏手柄的分布式游戏手柄、支持多设备数据同步的跨端接力抓宠功能、针对中低端设备优化3D粒子特效的方法,以及利用卡片服务创造各种实用功能的技巧。最后还提供了避坑指南,帮助开发者更高效地利用文档资源。
|
缓存 监控 定位技术
鸿蒙5开发宝藏案例分享---一多开发实例(音乐)
鸿蒙开发干货分享:涵盖动态布局、交互动效、服务卡片设计、内存优化、分布式开发及性能加速六大核心主题。从折叠屏适配到手势动画,从服务卡片最佳实践到内存泄漏检测,结合官方100+实战案例与高频痛点解决方案,助你解锁鸿蒙开发隐藏技巧,提升效率与用户体验。快来一起探讨开发中的那些“坑”吧!
|
4月前
|
IDE 开发工具 开发者
鸿蒙5开发宝藏案例分享---一多开发实例(移动支付)
本文分享鸿蒙开发中“一次开发多端部署”的实战技巧。通过栅格系统实现界面布局的智能排版,利用断点监听适配不同设备尺寸,解决动态二维码更新等问题。同时,详细解析收付款、扫一扫等功能跨端适配方案,提供卡包模块布局秘籍与开发小贴士。掌握这些官方案例,助你轻松实现代码复用与多设备自动适配!
|
4月前
|
开发者 容器
鸿蒙5开发宝藏案例分享---一多开发实例(股票类)
本文分享了一个HarmonyOS开发的股票应用案例,展示“一次开发多端部署”的实践技巧。通过9个核心页面,详解三大技术亮点:分栏布局(单双栏自动切换)、组件自适应(宫格卡片智能分列)和动态布局重构(栅格系统+断点监听)。同时提供避坑指南与实用组件推荐,帮助开发者高效掌握自适应布局精髓,提升开发效率。
|
4月前
|
缓存 容器
鸿蒙5开发宝藏案例分享---一多开发实例(图片美化)
鸿蒙开发宝藏案例分享:用一套代码搞定手机、折叠屏、平板和PC的图片美化应用!案例解析四大核心技术点:相册页动态列数、大图预览双指缩放、编辑页布局自动翻转及分层架构设计。更有开发避坑指南与实战心得,助你高效完成多端适配,提升开发效率!
|
4月前
|
开发者
鸿蒙5开发宝藏案例分享---一多开发实例(新闻阅读)
鸿蒙开发宝藏案例揭秘!本文分享HarmonyOS官方“一多开发”实战指南,助你轻松搞定多端适配。通过新闻阅读案例,掌握5种神奇布局技巧,学会三大核心招式:乾坤大挪移布局、影分身之术与七十二变瀑布流。更有超实用开发技巧、避坑指南及资源推荐,带你快速上手,重构项目代码量减少40%!快来动手体验吧~🚀
|
4月前
|
开发者 容器
鸿蒙5开发宝藏案例分享---一多开发实例(社区评论)
鸿蒙开发宝藏案例分享,助你轻松搞定多端适配!从热点页单列变瀑布流到动态卡片、左右布局分屏,再到双指缩放与鼠标键盘适配,实战经验一网打尽。通过断点控制和组件复用,实现一次开发自动适配手机、平板、PC。快来探索官方Demo,感受鸿蒙“一多开发”的魅力吧!
|
4月前
|
程序员 开发者
鸿蒙5开发宝藏案例分享---一多开发实例(即时通讯)
这是一篇关于鸿蒙“一次开发多端部署”实战经验的分享文章,作者通过剖析官方即时通讯案例,揭示了多个开发技巧和解决方案。内容涵盖布局切换、断点适配、跨设备文件传输等核心问题,如Navigation组件实现手机/平板布局动态调整、adaptive.ts简化媒体查询、手势操作自动适配等。此外,还提供了避坑指南和代码片段,帮助开发者高效利用官方资源,大幅提升开发效率。适合正在探索鸿蒙多端开发的程序员参考学习。