开天辟地 HarmonyOS(鸿蒙) - 开发基础: HAR(Harmony Archive)

源码 https://github.com/webabcd/HarmonyDemo
作者 webabcd

开天辟地 HarmonyOS(鸿蒙) - 开发基础: HAR(Harmony Archive)

示例如下:

pages\basic\HarDemo.ets

/** HAR(Harmony Archive) - 静态共享包*   支持独立发布(比如要发布你自己实现的第三方库时,就可以将其封装为一个 har 包)*   支持 UIAbility 组件,但是不支持 ExtensionAbility 组件*   不支持在 main_pages.json 中声明页面,也就是说无法通过页面地址跳转到 har 包内的页面,但是可以通过命名路由的方式跳转到 har 包内的页面*   在编译时与应用程序链接,代码直接嵌入到应用二进制文件中*/import { TitleBar } from '../TitleBar';
import { MainPage as har1_MainPage, hello as har1_hello } from 'har1' // 源码方式引用本地的 har 模块的示例
import { MainPage as har2_MainPage, hello as har2_hello } from 'har2' // 文件方式引用指定的 har 文件时示例
import { DialogHelper } from '@pura/harmony-dialog' // 引用第三方 har 包的示例
import { router } from '@kit.ArkUI';@Entry
@Component
struct HarDemo {build() {Column() {TitleBar()Tabs() {TabContent() { MySample1() }.tabBar('基础').align(Alignment.Top)}.scrollable(true).barMode(BarMode.Scrollable).layoutWeight(1)}}
}/** HAR(Harmony Archive)是静态共享包* 右键单击全局项目,然后 New -> Module... -> Static Library 即可创建新 har 包* 在 har 项目中的 oh-package.json5 的 main 指定的文件中,配置需要导出的功能* 如需编译打包,则选中 har 模块,然后在 Build 菜单中编译即可,编译后是 .har 文件** 源码方式引用本地的 har 模块时,如果需要在 entry 模块中引用,则在 entry/oh-package.json5 中做类似如下的配置* {*   "dependencies": {*     "har1": "../har1"*   }* }* 然后执行 ohpm install 后即可* 导入的方法类似如下 import { MainPage as har1_MainPage } from 'har1'** 文件方式引用指定的 har 文件时,如果需要在 entry 模块中引用,则在 entry/oh-package.json5 中做类似如下的配置* {*   "dependencies": {*     "har2": "../library/har2.har"*   }* }* 然后执行 ohpm install 后即可(如果文件更新了则需要再执行 ohpm install)* 导入的方法类似如下 import { MainPage as har2_MainPage } from 'har2'** 引用第三方 har 包时,先在 https://ohpm.openharmony.cn/ 中找到需要的第三方包* 如果需要在全局项目中引用,则在全局目录下执行类似如下的命令即可 ohpm i @pura/harmony-dialog* 然后会发现,在全局项目中的 oh-package.json5 中多了类似如下的配置* {*   "dependencies": {*     "@pura/harmony-dialog": "^1.1.3"*   }* }*/
@Component
struct MySample1 {@State message: string = ""aboutToAppear(): void {// 调用 har 包中的接口this.message += `${har1_hello("webabcd")}\n` // 参见 har1/src/main/ets/utils/Helper.etsthis.message += `${har2_hello("webabcd")}\n` // 参见 har2/src/main/ets/utils/Helper.ets}build() {Column({ space: 10 }) {Text(this.message)// 显示 har 包中的页面har1_MainPage({param1: "value1"}).height(120) // 参见 har1/src/main/ets/components/MainPage.etshar2_MainPage({param1: "value1"}).height(120) // 参见 har2/src/main/ets/components/MainPage.ets// 跳转到 har 包中的指定的页面Button("通过命名路由跳转到 har 包的指定的页面").onClick(() => {router.pushNamedRoute({name: 'routeName1', // 命名路由的名称,参见 har1/src/main/ets/components/MyPage.etsparams: { // 传参param1: "value1",}})})Button("通过命名路由跳转到 har 包的指定的页面").onClick(() => {router.pushNamedRoute({name: 'routeName2', // 命名路由的名称,参见 har2/src/main/ets/components/MyPage.etsparams: { // 传参param1: "value1",}})})Button("第三方库测试").onClick(() => {DialogHelper.showToast('第三方库测试');})}}
}

\har1\Index.ets

// 注:在项目中的 oh-package.json5 的 main 标签需要配置为本文件(Index.ets)// 当前 HAR 库需要导出的功能
export { MainPage } from './src/main/ets/components/MainPage'
export { MyPage } from './src/main/ets/components/MyPage'
export { hello } from './src/main/ets/utils/Helper'

\har1\src\main\ets\utils\Helper.ets

export function hello(name: string) {return `hello(har1):${name}`
}

\har1\src\main\ets\components\MainPage.ets

@Component
export struct MainPage {// 组件参数,在调用此组件的时候可以对其初始化param1: string = ""@State message: string = 'hello har1\n';aboutToAppear(): void {this.message += `param1: ${this.param1}`}build() {Row() {Column() {Text(this.message).fontSize(36).fontWeight(FontWeight.Bold)}.width('100%')}.height('100%')}
}

\har1\src\main\ets\components\MyPage.ets

import { router } from "@kit.ArkUI";/** @Entry() - 通过 routeName 指定命名路由的名称,其他包可以通过 router.pushNamedRoute() 导航至指定名称的页面*/
@Entry({ routeName: "routeName1" })
@Component
export struct MyPage {@State message: string = 'hello routeName1\n';aboutToAppear(): void {/** router.getParams() - 获取 router 传递过来的数据*/const params = router.getParams() as Record<string, string>this.message += `param1: ${params.param1}`}build() {Row() {Column() {Text(this.message).fontSize(36).fontWeight(FontWeight.Bold)}.width('100%')}.height('100%')}
}

\har2\Index.ets

// 注:在项目中的 oh-package.json5 的 main 标签需要配置为本文件(Index.ets)// 当前 HAR 库需要导出的功能
export { MainPage } from './src/main/ets/components/MainPage'
export { MyPage } from './src/main/ets/components/MyPage'
export { hello } from './src/main/ets/utils/Helper'

\har2\src\main\ets\utils\Helper.ets

export function hello(name: string) {return `hello(har2):${name}`
}

\har2\src\main\ets\components\MainPage.ets

@Component
export struct MainPage {// 组件参数,在调用此组件的时候可以对其初始化param1: string = ""@State message: string = 'hello har2\n';aboutToAppear(): void {this.message += `param1: ${this.param1}`}build() {Row() {Column() {Text(this.message).fontSize(36).fontWeight(FontWeight.Bold)}.width('100%')}.height('100%')}
}

\har2\src\main\ets\components\MyPage.ets

import { router } from "@kit.ArkUI";/** @Entry() - 通过 routeName 指定命名路由的名称,其他包可以通过 router.pushNamedRoute() 导航至指定名称的页面*/
@Entry({ routeName: "routeName2" })
@Component
export struct MyPage {@State message: string = 'hello routeName2\n';aboutToAppear(): void {/** router.getParams() - 获取 router 传递过来的数据*/const params = router.getParams() as Record<string, string>this.message += `param1: ${params.param1}`}build() {Row() {Column() {Text(this.message).fontSize(36).fontWeight(FontWeight.Bold)}.width('100%')}.height('100%')}
}

源码 https://github.com/webabcd/HarmonyDemo
作者 webabcd

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

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

相关文章

kylin v10 sp2升级glibc到2.29和2.31

目录环境安装glibc2.29安装glibc2.31 环境 [root@kyline10 ~]# cat /etc/os-release NAME="Kylin Linux Advanced Server" VERSION="V10 (Sword)" ID="kylin" VERSION_ID="V10" PRETTY_NAME="Kylin Linux Advanced Server V10 (…

pycharm连接CentOS虚拟机并执行Spark

pycharm连接虚拟机注意:pycahrm远程使用ssh连接虚拟机需要专业版在CentOS7的虚拟机当中,会自带一个python2.6老版本的python,所以自己准备一个python3.x版本的解释器,如python3.9 一、前置准备工作 # 安装前置依赖 yum install zlib-devel bzip2-devel openssl-devel ncurs…

02_openai开发

基本概念Tokens(标记):在自然语言处理中,token是输入文本被分割成的小单元。一个token可以是一个单词、一个子词,甚至是一个字符。这取决于文本的具体分割方式。OpenAI常用参数 1. max_tokens(最大token数) 定义:指令生成的回答中包含的最大token数。例如,如果设置为1…

day20 yum的详细的讲述

day20 yum的精讲 yum是centos 7中很重要的工具需要我们去了解和学习 1.学习的任务和背景 一般开发团队需要数据库的环境来测试程序 现在需要运维人员来协助在测试机器上Centos7上安装好 MySQL-5.6.43版本来作为前期迁移的准备的工作 同时== 配备好本地的yum源==方便后续软件包的…

Active Directory审核的常见误区(3)

一、忽略过时、未激活和孤立的用户帐户 存在未使用的用户帐户在AD域中是一个重大的安全隐患。离职员工和黑客可能会因此漏洞而去窃取企业的重要资源。这时候,制定处理离职员工的策略就显得至关重要,这包括禁用他的AD用户帐户、将他从电子邮件组中删除、撤销他对业务应用程序的…

java.net.UnknownHostException: upload-as0.qiniup.com: Name or service not known on问题排查

参考地址:https://blog.csdn.net/weixin_43700340/article/details/88393833 ping upload-as0.qiniup.com还有百度不通,但是局域网可以ping通ping网关可以ping通,ping公共地址也可以ping通如果直接ping百度的ip是可以通的通过上面的博客知道应该是DSN出了问题 也试过了这个命…

Java使用Amazon S3客户端实现前后端联动文件分片上传

在使用对象存储的时候,遇到超大文件上传的应用场景,可以通过前后端联动的方式,实现超大文件从前端直接向对象存储服务进行分片上传,具体实现过程如下: Maven依赖: <dependency><groupId>software.amazon.awssdk</groupId><artifactId>s3</art…

IOMMU和IOVA

IOMMU和IOVA 默认情况下,任何硬件都可以访问整个系统,因此它可以在任何地方执行DMA 事务。这有许多安全隐患。例如,流氓和/或不可信进程(包括在VM (虚拟机)内运行的进程)可能使用硬件设备来读写内核空间,和几乎其他任何存储位置。为了解决这个问题,现代系统配备了输入输出…

linux无法连接宿主机网络问题

很奇怪,之前我是可以连接宿主机互联网的,突然有一天不行了, 没找到具体的原因, 网上找了一下怎么解决,网络就又好了, 先记录一下,有时间在研究。 1、在虚拟机中创建的“电脑”上,右键选则setting(设置)。 2、选择NAT模式,然后点击Edit--》virtual network editor,点…

Node.js 路由

我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码。 因此,我们需要查看 HTTP 请求,从中提取出请求的 URL 以及 GET/POST 参数。这一功能应当属于路由还是服务器(甚至作为一个模块自身的功能)? 我们需要的所有数据都会…

SageMath 9.3软件下载与安装教程

1、安装包 扫描下方二维码关注「软知社」,后台回复【051】三位数字即可免费获取分享链接,无广告拒绝套路; 2、安装教程(建议关闭杀毒软件)双击解压安装包安装,弹窗安装对话框点击下一步选择I accept,点击下一步默认,点击下一步默认文件夹,点击下一步安装路径选择D盘,点…

GoLand 2024软件下载与安装教程

1、安装包 扫描下方二维码关注「软知社」,后台回复【048】三位数字即可免费获取分享链接,无广告拒绝套路; 2、安装教程(建议关闭杀毒软件)下载并解压压缩包,双击exe文件安装,弹窗安装对话框点击下一步创建桌面快捷方式,点击下一步默认,点击安装等待安装过程运行软件,点…