Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
26d70eb7
D
Docs
项目概览
OpenHarmony
/
Docs
大约 1 年 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
26d70eb7
编写于
3月 10, 2023
作者:
C
changzheng6
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update shared docs
Signed-off-by:
N
changzheng6
<
hanfeng6@huawei.com
>
上级
bb29484b
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
37 addition
and
36 deletion
+37
-36
zh-cn/application-dev/quick-start/application-package-structure-stage.md
...on-dev/quick-start/application-package-structure-stage.md
+1
-1
zh-cn/application-dev/quick-start/cross-app-hsp.md
zh-cn/application-dev/quick-start/cross-app-hsp.md
+15
-15
zh-cn/application-dev/quick-start/har-package.md
zh-cn/application-dev/quick-start/har-package.md
+16
-16
zh-cn/application-dev/quick-start/in-app-hsp.md
zh-cn/application-dev/quick-start/in-app-hsp.md
+1
-1
zh-cn/application-dev/quick-start/shared-guide.md
zh-cn/application-dev/quick-start/shared-guide.md
+4
-3
未找到文件。
zh-cn/application-dev/quick-start/application-package-structure-stage.md
浏览文件 @
26d70eb7
...
...
@@ -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组件关系示意图
...
...
zh-cn/application-dev/quick-start/cross-app-hsp.md
浏览文件 @
26d70eb7
# 应用间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
();
})
}
...
...
zh-cn/application-dev/quick-start/har-package.md
浏览文件 @
26d70eb7
# 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%
'
)
...
...
zh-cn/application-dev/quick-start/in-app-hsp.md
浏览文件 @
26d70eb7
...
...
@@ -110,7 +110,7 @@ export { nativeMulti } from './utils/nativeTest'
"library"
:
"file:../library"
}
```
然后就可以像使用
`HAR`
包
一样调用
`HSP`
的对外接口了。
然后就可以像使用
`HAR`
一样调用
`HSP`
的对外接口了。
例如,上面的
`library`
已经导出了下面这些接口:
```
ts
// library/src/main/ets/index.ets
...
...
zh-cn/application-dev/quick-start/shared-guide.md
浏览文件 @
26d70eb7
# 共享包概述
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录