提交 26d70eb7 编写于 作者: C changzheng6

update shared docs

Signed-off-by: Nchangzheng6 <hanfeng6@huawei.com>
上级 bb29484b
......@@ -4,7 +4,7 @@
基于[Stage模型](application-configuration-file-overview-stage.md)开发的应用,经编译打包后,其应用程序包结构如下图**应用程序包结构(Stage模型)**所示。开发者需要熟悉应用程序包结构相关的基本概念。
- 在开发态,一个应用包含一个或者多个Module,可以在[DevEco Studio](https://developer.harmonyos.com/cn/develop/deveco-studio/)工程中[创建一个或者多个Module](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ohos-adding-deleting-module-0000001218760594-V3)。Module是OpenHarmony应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件,每一个Module都可以独立进行编译和运行。Module分为“Ability”和“Library”两种类型,“Ability”类型的Module对应于编译后的HAP(Harmony Ability Package);“Library”类型的Module对应于[HAR](har-package.md)(Harmony Archive)包,或者[HSP](shared-guide.md)(Harmony Shared Package)包
- 在开发态,一个应用包含一个或者多个Module,可以在[DevEco Studio](https://developer.harmonyos.com/cn/develop/deveco-studio/)工程中[创建一个或者多个Module](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ohos-adding-deleting-module-0000001218760594-V3)。Module是OpenHarmony应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件,每一个Module都可以独立进行编译和运行。Module分为“Ability”和“Library”两种类型,“Ability”类型的Module对应于编译后的HAP(Harmony Ability Package);“Library”类型的Module对应于[HAR](har-package.md)(Harmony Archive),或者[HSP](shared-guide.md)(Harmony Shared Package)
一个Module可以包含一个或多个[UIAbility](../application-models/uiability-overview.md)组件,如**Module与UIAbility组件关系示意图**所示。
**图1** Module与UIAbility组件关系示意图
......
# 应用间HSP开发指导
应用间`HSP`用于不同应用间的代码、资源共享。
应用间`HSP`的宿主应用是一种特殊状态的应用,只能由一个[HSP](hsp-guide.md)组成,不会独立运行在设备上,而是被普通应用模块的依赖项引用。当普通应用运行时,通过动态调用的方式使用应用间`HSP`提供的能力,从而实现应用自身所需要的功能。
应用间`HSP`的宿主应用是一种特殊状态的应用,只能由一个[HSP](hsp-guide.md)组成,不会独立运行在设备上,而是被普通应用模块的依赖项引用。当普通应用运行时,通过动态调用的方式使用应用间`HSP`提供的能力,从而实现应用自身所需要的功能。
## 应用间HSP的使用
应用间HSP会分为两部分对外发布:
一部分为[HAR](har-package.md),这部分`HAR`包中不会包含具体的功能实现代码,而仅仅包含导出的对象与方法,所以体积很小。应用开发者将`HAR`包集成到自身的工程中,然后就可以通过调用`HAR`中提供的对象与方法完成自身的应用功能。
一部分为[HAR](har-package.md),这部分`HAR`中不会包含具体的功能实现代码,而仅仅包含导出的对象与方法,所以体积很小。应用开发者将`HAR`集成到自身的工程中,然后就可以通过调用`HAR`中提供的对象与方法完成自身的应用功能。
另外一部分为[HSP](hsp-guide.md),这部分为应用间`HSP`的具体实现,里面包含js/ts代码、C++库、资源和配置文件。这部分会上架到应用市场或者集成到系统版本中。
### 集成应用间HSP的HAR
`HAR`中的`index.d.ets`文件是应用间`HSP`导出的声明文件的入口,所有需要导出的接口,统一在`index.d.ets`文件中定义。`index.d.ets`文件路径如下:
### 集成应用间HSP的HAR
`HAR`中的`index.d.ets`文件是应用间`HSP`导出的声明文件的入口,所有需要导出的接口,统一在`index.d.ets`文件中定义。`index.d.ets`文件路径如下:
```
src
├── main
......@@ -110,8 +110,8 @@ extern "C" __attribute__((constructor)) void RegisterLibaModule(void) {
napi_module_register(&demoModule);
}
```
### 使用HAR导出的能力
引用`HAR`包前,需要先配置对`HAR`的依赖,配置方式可参考[文档](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-development-npm-package-0000001222578434#section89674298391)`HAR`配置成功后,在配置模块的`module.json`中会生成相关依赖项信息,如下所示:
### 使用HAR导出的能力
引用`HAR`前,需要先配置对`HAR`的依赖,配置方式可参考[文档](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-development-npm-package-0000001222578434#section89674298391)`HAR`配置成功后,在配置模块的`module.json`中会生成相关依赖项信息,如下所示:
```json
"dependencies": [
{
......@@ -122,8 +122,8 @@ extern "C" __attribute__((constructor)) void RegisterLibaModule(void) {
]
```
其中`bundleName`为应用间`HSP``bundle`名称,`moduleName`为应用间`HSP`的模块名称,`versionCode`为应用间`HSP`的版本号。
#### **使用HAR中的ArkUI组件**
`HAR`共享包的依赖配置成功后,可以引用`HAR`共享包的ArkUI组件。ArkUI组件的导入方式与ts的导入方式一致,通过`import`引入`HAR`共享包导出的ArkUI组件,示例如下所示:
#### **使用HAR中的ArkUI组件**
`HAR`的依赖配置成功后,可以引用`HAR`的ArkUI组件。ArkUI组件的导入方式与ts的导入方式一致,通过`import`引入`HAR`导出的ArkUI组件,示例如下所示:
``` ts
import { UIComponent } from 'liba'
......@@ -133,7 +133,7 @@ struct Index {
@State message: string = 'Hello World'
build() {
Row() {
// 引用HAR共享包的ArkUI组件
// 引用HAR的ArkUI组件
UIComponent()
Column() {
Text(this.message)
......@@ -147,8 +147,8 @@ struct Index {
}
```
#### **使用HAR中的ts方法**
通过`import`引用`HAR`共享包导出的ts类和方法,示例如下所示:
#### **使用HAR中的ts方法**
通过`import`引用`HAR`导出的ts类和方法,示例如下所示:
``` ts
import { foo1 } from 'liba'
import { foo2 } from 'liba'
......@@ -160,7 +160,7 @@ struct Index {
Column() {
Button('Button')
.onClick(()=>{
// 引用HAR共享包的ts方法
// 引用HAR的ts方法
foo1();
foo2();
})
......@@ -171,8 +171,8 @@ struct Index {
}
}
```
#### **使用HAR中的native方法**
通过`import`引用`HAR`共享包导出的native方法,示例如下所示:
#### **使用HAR中的native方法**
通过`import`引用`HAR`导出的native方法,示例如下所示:
``` ts
import { nativeHello } from 'liba'
......@@ -183,7 +183,7 @@ struct Index {
Column() {
Button('Button')
.onClick(()=>{
// 引用HAR共享包的native方法
// 引用HAR的native方法
nativeHello();
})
}
......
# HAR
HAR(Harmony Archive)是Harmony静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR共享包,可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。
HAR(Harmony Archive)是Harmony静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。
## 创建HAR模块
HAR对应DevEco Studio工程中的“Library”类型的[Module](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ohos-adding-deleting-module-0000001218760594-V3),可以通过DevEco Studio创建一个HAR模块。HAR模块默认不开启混淆能力,开启混淆能力,需要把HAR模块的build-profile.json5文件中的artifactType字段设置为obfuscation,配置如下所示:
HAR对应DevEco Studio工程中的“Library”类型的[Module](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ohos-adding-deleting-module-0000001218760594-V3),可以通过DevEco Studio创建一个HAR模块。HAR模块默认不开启混淆能力,开启混淆能力,需要把HAR模块的build-profile.json5文件中的artifactType字段设置为obfuscation,配置如下所示:
```json
{
......@@ -19,7 +19,7 @@ artifactType字段有以下两种取值,默认缺省为original。
需要对代码资产进行保护时,建议开启混淆能力,混淆能力开启后,DevEco Studio在构建HAR时,会对代码进行编译、混淆及压缩处理,保护代码资产。
注意:artifactType字段设置为obfuscation时,apiType字段必须设置为stageMode,因为Stage模型才支持混淆。
## HAR共享包开发注意事项
## HAR开发注意事项
- HAR不支持在配置文件中声明abilities、extensionAbilities组件。
- HAR不支持在配置文件中声明pages页面。
- HAR不支持在build-profile.json5文件的buildOption中配置worker。
......@@ -27,7 +27,7 @@ artifactType字段有以下两种取值,默认缺省为original。
- Stage模型的HAR,不能引用AppScope内的内容。在编译构建时APPScope中的内容不会打包到HAR中,导致HAR资源引用失败。
## 导出HAR的ArkUI组件、接口、资源
index.ets文件是HAR共享包导出声明文件的入口,HAR共享包需要导出的接口,统一在index.ets文件中导出。index.ets文件是DevEco Studio默认自动生成的,用户也可以自定义,在模块的package.json文件中的main字段配置入口声明文件,配置如下所示:
index.ets文件是HAR导出声明文件的入口,HAR需要导出的接口,统一在index.ets文件中导出。index.ets文件是DevEco Studio默认自动生成的,用户也可以自定义,在模块的package.json文件中的main字段配置入口声明文件,配置如下所示:
```json
{
"main": "index.ets"
......@@ -84,17 +84,17 @@ export { func } from './src/main/ts/test'
export { func2 } from './src/main/ts/test'
```
### 资源
HAR模块编译打包时会把资源打包到HAR中。在编译构建HAP时,DevEco Studio会从HAP模块及依赖的模块中收集资源文件,如果不同模块下的资源文件出现重名冲突时,DevEco Studio会按照以下优先级进行覆盖(优先级由高到低):
HAR模块编译打包时会把资源打包到HAR中。在编译构建HAP时,DevEco Studio会从HAP模块及依赖的模块中收集资源文件,如果不同模块下的资源文件出现重名冲突时,DevEco Studio会按照以下优先级进行覆盖(优先级由高到低):
- AppScope(仅API9的Stage模型支持)。
- HAP包自身模块。
- 依赖的HAR模块,如果依赖的多个HAR之间有资源冲突,会按照依赖顺序进行覆盖(依赖顺序在前的优先级较高)。
## 引用HAR的ArkUI组件、接口、资源
引用HAR共享包前,需要先配置对HAR的依赖,配置方式可[参考](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-development-npm-package-0000001222578434#section89674298391)
引用HAR前,需要先配置对HAR的依赖,配置方式可[参考](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-development-npm-package-0000001222578434#section89674298391)
### 引用HAR共享包的ArkUI组件
### 引用HAR的ArkUI组件
HAR共享包的依赖配置成功后,可以引用HAR共享包的ArkUI组件。ArkUI组件的导入方式与ts的导入方式一致,通过`import`引入HAR共享包导出的ArkUI组件,示例如下所示:
HAR的依赖配置成功后,可以引用HAR的ArkUI组件。ArkUI组件的导入方式与ts的导入方式一致,通过`import`引入HAR导出的ArkUI组件,示例如下所示:
```js
// entry/src/main/ets/pages/index.ets
import { MainPage } from "@ohos/library"
......@@ -105,7 +105,7 @@ struct Index {
@State message: string = 'Hello World'
build() {
Row() {
// 引用HAR共享包的ArkUI组件
// 引用HAR的ArkUI组件
MainPage()
Column() {
Text(this.message)
......@@ -118,8 +118,8 @@ struct Index {
}
}
```
### 引用HAR共享包的类和方法
通过`import`引用HAR共享包导出的ts类和方法,示例如下所示:
### 引用HAR的类和方法
通过`import`引用HAR导出的ts类和方法,示例如下所示:
```js
// entry/src/main/ets/pages/index.ets
import { Log } from "@ohos/library"
......@@ -133,7 +133,7 @@ struct Index {
Column() {
Button('Button')
.onClick(()=>{
// 引用HAR共享包的类和方法
// 引用HAR的类和方法
Log.info("har msg");
func();
})
......@@ -144,8 +144,8 @@ struct Index {
}
}
```
### 引用HAR共享包的资源
通过`$r`引用HAR共享包中的资源,例如在HAR模块的`src/main/resources`里添加字符串资源(在string.json中定义,name:hello_har)和图片资源(icon_har.png),然后在Entry模块中引用该字符串和图片资源的示例如下所示:
### 引用HAR的资源
通过`$r`引用HAR中的资源,例如在HAR模块的`src/main/resources`里添加字符串资源(在string.json中定义,name:hello_har)和图片资源(icon_har.png),然后在Entry模块中引用该字符串和图片资源的示例如下所示:
```js
// entry/src/main/ets/pages/index.ets
@Entry
......@@ -154,11 +154,11 @@ struct Index {
build() {
Row() {
Column() {
// 引用HAR共享包的字符串资源
// 引用HAR的字符串资源
Text($r("app.string.hello_har"))
.fontSize(50)
.fontWeight(FontWeight.Bold)
// 引用HAR共享包的图片资源
// 引用HAR的图片资源
Image($r("app.media.icon_har"))
}
.width('100%')
......
......@@ -110,7 +110,7 @@ export { nativeMulti } from './utils/nativeTest'
"library": "file:../library"
}
```
然后就可以像使用`HAR`一样调用`HSP`的对外接口了。
然后就可以像使用`HAR`一样调用`HSP`的对外接口了。
例如,上面的`library`已经导出了下面这些接口:
```ts
// library/src/main/ets/index.ets
......
# 共享包概述
Harmony提供了两种共享包,[HAR(Harmony Achive)](har-package.md)静态共享包,和`HSP``Harmony Shared Package`)动态共享包。
`HAR``HSP`都是为了实现代码和资源的共享,都可以包含代码、C++库、资源和配置文件,最大的不同之处在于,`HAR`中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝。**而`HSP`中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。**
**图1** `HAR``HSP``APP`包中的形态示意图
![in-app-hsp-har](figures/in-app-hsp-har.png)
**HSP旨在解决HAR存在的几个问题:**
- 多个`HAP`引用相同`HAR`,导致的`APP`包大小膨胀问题
- 多个`HAP`引用相同`HAR`包,`HAR`中的一些状态变量无法共享的问题
**HSP旨在解决HAR存在的几个问题:**
- 多个`HAP`引用相同`HAR`,导致的`APP`包大小膨胀问题
- 多个`HAP`引用相同`HAR``HAR`中的一些状态变量无法共享的问题
**HSP的一些约束:**
- `HSP`及其使用方都必须是`Stage`模型
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册