提交 61e0c5fe 编写于 作者: H Haoming Luo

添加'导出HSP中资源'部分

Signed-off-by: NHaoming Luo <mzfslhm@163.com>
上级 11a04c4b
......@@ -80,11 +80,67 @@ export struct MyTitleBar {
// library/src/main/ets/index.ets
export { MyTitleBar } from './components/MyTitleBar'
```
#### HSP中资源使用说明
### 导出HSP中资源
#### 通过$r访问HSP中资源
注意,在`HSP`中,通过`$r`/`$rawfile`可以使用本模块`resources`目录下的资源。
如果使用相对路径的方式,例如:
`HSP`模块中使用`Image("common/example.png")`,实际上该`Image`组件访问的是`HSP调用方`(如`entry`)下的资源`entry/src/main/ets/common/example.png`
#### 通过resourceManager访问HSP中资源
先通过当前上下文获取hsp模块的上下文,再获取hsp模块的resourceManager,然后再调用resourceManager的接口获取资源。
注:该方法不推荐使用,因为需要开发者手动维护调用名称与HSP内部的资源名称一致。
```ts
Button('getStringValue')
.onClick(()=> {
getContext().createModuleContext('library').resourceManager.getStringByName("shared_desc")
.then(value => {
console.log("getStringByName value is " + value);
})
.catch(error => {
console.log("getStringByName promise error is " + error);
});
})
.width("50%")
```
#### 导出HSP中资源给使用方使用
可以使用一个类来提供对外导出资源的接口,该方案的好处是:
- HSP开发者可以控制自己需要导出的资源,不需要对外暴露的资源可以不用导出
- 使用方无须感知HSP内部的资源名称
- HSP内部的资源名称变化时,不需要使用方跟着修改
具体实现如下:
封装对外提供资源的接口类:
```ts
// library/src/main/ets/ResManager.ets
export class ResManager{
static getPic(){
return $r("app.media.pic");
}
}
```
`index.ts`中导出该类:
```ts
// library/src/main/ets/index.ets
export { ResManager } from './ResManager'
```
将ResManager导入使用方代码文件:
```ts
// 使用方
import {ResManager} from "library"
```
再以`ResManager.getPic()`的API获取资源,如下面的Image组件:
```ts
// 使用方
Image(ResManager.getPic())
.width("100%")
```
### 导出native方法
`HSP`中也可以包含`C++`编写的`so`。对于`so`中的`native`方法,`HSP`通过间接的方式导出,以导出`libnative.so`的乘法接口`multi`为例:
```ts
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册