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

news2024/10/6 18:22:47

简要介绍

静态共享包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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修改Tomcat的默认端口号

1、找到Tomcat的安装路径。 2、打开conf文件夹。 3、用记事本打开server.xml文件 4、找到 <Connector port"8080" protocol"HTTP/1.1"&#xff0c;其中的8080就是tomcat的默认端口&#xff0c;将其修改为你需要的端口即可。

图书管理信息系统分析与设计

一、系统开发的可行性分析 &#xff08;一&#xff09;系统背景.必要性及意义 随着社会经济的迅速发展和科学技术的全面进步&#xff0c;计算机事业的飞速发展&#xff0c;以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化水平的显著提高&#xff0c;人…

数据接口工程对接BI可视化大屏(六)接收前台数据

文章目录 第6章 接收前台数据6.1 模拟数据6.2 接收数据6.2.1 编写Dao6.2.2 编写ServiceImpl6.2.3 编写Controller6.2.4 验证 后记 第6章 接收前台数据 在工作中也会遇到需要接收前台发送数据&#xff0c;进行存储的情况。这里以接收日志服务器的日志数据保存到kafka为例。 6.…

久运恒远聚焦物业多营渠道致力服务美好生活

随着社会的不断发展和人民生活水平的不断提高&#xff0c;物业行业已经逐渐向深度服务化方向调整&#xff0c;物业的多种经营体系也成为品牌关注和布局的重要销售渠道。久运恒远&#xff08;北京&#xff09;企业管理有限公司聚焦物业多营体系&#xff0c;整合资源&#xff0c;…

CTFHub | 综合过滤练习

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

简单5步骤搞定windows server2019 配置IIS支持PHP

测试成功&#xff0c;记录一笔&#xff0c;感谢网上各位大佬的技术支持。 一、安装vcredist_x64.exe 否则可能会出现 FastCGI进程意外退出 二、IIS开启CGI&#xff08;可能需要重启&#xff09; 控制面板&#xff0c;启用或关闭windows程序&#xff0c;IIS--应用程序开发--CGI…

61、SpringBoot -----跨域资源的设置----局部设置和全局设置

★ 跨域资源共享的意义 ▲ 在前后端分离的开发架构中&#xff0c;前端应用和后端应用往往是彻底隔离的&#xff0c;二者不在同一个应用服务器内、甚至不再同一台物理节点上。 因此前端应用和后端应用就不在同一个域里。▲ 在这种架构下&#xff0c;前端应用可能采用前端框架&a…

Linux入门教程||Linux系统目录结构

登录系统后&#xff0c;在当前命令窗口下输入命令&#xff1a; ls / 你会看到如下图所示: 树状目录结构&#xff1a; 以下是对这些目录的解释&#xff1a; /bin&#xff1a; bin是Binary的缩写, 这个目录存放着最经常使用的命令。 /boot&#xff1a; 这里存放的是启动Linux时…

【AIGC专题】Stable Diffusion 从入门到企业级实战0601

一、前言 本章是《Stable Diffusion 从入门到企业级实战》系列的第六部分Prompt专题篇《Stable Diffusion Prompt 专题》第01节 《Stable Diffusion Prompt 通用画风操作实战》。本部分内容&#xff0c;位于整个Stable Diffusion生态体系的位置如下图黄色部分所示&#xff1a;…

RJ45水晶头网线顺序出错排查

线序 网线水晶头RJ45常用的线序标准ANSI / TIA-568定义了T568A与T568B两种线序&#xff0c;一般使用T568B&#xff0c;水晶头8个孔对应的8条线颜色如下图&#xff1a; 那1至8的编号&#xff0c;是从水晶头哪一面为参考呢&#xff0c;如下图&#xff0c;是水晶头金手指一面&am…

SAP ABAP基础知识 访问外部数据库-开发篇

前言 本文主要介绍通过ABAP语言访问外部数据库的几种方式 一、外部数据库配置 本文示例中的代码访问了两个外部数据库 MTD : 外部oracle数据库,其中示例表 ZTTEMP 字段( ZZTNO,WERKS) S4Q : 外部HANA数据库(开发系统访问测试系统的数据库), 使用表USR02,ZTTEMP 二、ABAP访问…

YOLO物体检测系列2:YOLOV2整体解读

1、YOLOV1 优点&#xff1a;快速&#xff0c;简单&#xff01;问题1&#xff1a;每个Cell只预测一个类别&#xff0c;如果重叠无法解决问题2&#xff1a;小物体检测效果一般&#xff0c;长宽比可选的但单一 YOLOV2更快&#xff01;更强&#xff01; 2、Batch Normalization …

群晖NAS教程(二十五)、利用web station安装nextcloud

群晖NAS教程(二十五)、利用web station安装nextcloud 一、下载离线安装包文件 下载地址https://download.nextcloud.com/server/releases/&#xff0c;我们选择zip格式的&#xff0c;下载这个latest-27.zip的最新版的。 把它加压缩到群辉web/hepnextcloud路径下&#xff0c;并…

算法:贪心---跳一跳

1、题目&#xff1a; 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 2…

包管理工具--》其他包管理器之cnpm、pnpm、nvm

包管理工具系列文章目录 一、包管理工具--》npm的配置及使用&#xff08;一&#xff09; 二、包管理工具--》npm的配置及使用&#xff08;二&#xff09; 三、包管理工具--》发布一个自己的npm包 四、包管理工具--》yarn的配置及使用 五、包管理工具--》其他包管理器之cnpm…

Codeforces Round 790 (Div. 4) D 求矩形里面斜线的和的最大值

Codeforces Round 790 (Div. 4) D 做题链接&#xff1a;https://codeforces.com/contest/1676/problem/D 帖木儿的爷爷送给他一个棋盘&#xff0c;让他练习棋艺。这个棋盘是一个a行n列的网格&#xff0c;每个单元格都写有一个非负整数。 帖木儿的挑战是在棋盘上放置一只主教&…

Sweet Home 3D for Mac(3D室内装潢设计软件)

如果你想设计一个美丽而舒适的家居空间&#xff0c;那么Sweet Home 3D for Mac(3D室内装潢设计软件)是一个不可或缺的工具。 Sweet Home 3D for Mac是一款功能强大的室内装潢设计软件&#xff0c;专为Mac用户设计。 它提供了一个直观而易于使用的界面&#xff0c;使您能够轻松…

【Y 码力】WAL 与性能

【Y 码力】: 是由 YMatrix 研发团队负责的栏目&#xff0c;栏目专注介绍数据库的底层原理、实现细节&#xff0c;以及YMatrix 研发团队不断探索中的工程实践。我们希望栏目能够成为数据库技术的显微镜&#xff0c;同时也能够成为大家了解 YMatrix 研发团队的一扇窗。 摘要 谈…

百度千帆大模型文心一言api调用

注册百度智能云账号并申请文心千帆大模型资格 https://login.bce.baidu.com/ https://cloud.baidu.com/product/wenxinworkshop 创建应用获取 创建应用成功后,可以获取到API Key和Secret Key 获取access_token curl https://aip.baidubce.com/oauth/2.0/token?grant_typec…

PyCharm、IDEA、 CLion 专业版安装

1.下载专业版 PyCharm 2.以2023.1.4为例 3.next 4.next 5.next 6.Install 7.Finish 8.Activate 链接&#xff1a;https://pan.baidu.com/s/1N9n8wGgkvjfOX8oDrfX2Hw 提取码&#xff1a;yyds