【答开发者问】栏目为开发者呈现鸿蒙官方技术支持团队针对部分开发者在开发过程中遇到的问题,给出的官方答复,助力开发者扫清鸿蒙开发路上的障碍,后续会继续为大家更新最新问题和最新官方回复内容!
本期文章为大家选取了2个常见开发问题及官方回复内容,希望能为大家带来新的思考~
Q
如何导入其他module的so库?
详细描述:
项目里有多个模块,在其中一个公共模块,创建了cpp目录,放入了c++代码,并配置好了index.d.ts、cmake、napi等信息,在本模块界面中通过import libxx from 'libxx.so'可以正常调用C++函数。但是在其他模块中,用这样的导入方式IDE会报错,如图所示,应该如何正确导入?
1.在HAR/HSP模块的build-profile.json5中buildOption/nativeLib/headerPath指定接口文件目录
buildOption: { nativeLib: { headerPath: "src/main/cpp/include" } }
2.调用方依赖HAR/HSP包
// oh-package.json dependencies: { curl: "1.0.0" }
Q
使用@Builder数据刷新后UI没有刷新,导致图片错乱怎么解决?
问题描述:
@Reusable
@Component
struct ReusableFlowItem {
@State item: number = 0
@Prop fontSize: number = 12
// 从复用缓存中加入到组件树之前调用,可在此处更新组件的状态变量以展示正确的内容
aboutToReuse(params: Record<string, number>) {
this.item = params.item;
console.info('Reuse item:' + this.item)
}
aboutToAppear() {
console.info('item:' + this.item)
}
@Builder
itemBuild(icon: string, item: number) {
Image($r(icon))
.objectFit(ImageFit.Fill)
.geometryTransition('geometryTransition'+icon )
.sharedTransition('sharedImage' + icon + item, {duration: 300 });
}
build() {
Column() {
// 直接使用 itemBuild 会有复用错乱问题
// this.itemBuild(getIcon(this.item), this.item)
Image($r(getIcon(this.item)))
.objectFit(ImageFit.Fill)
.geometryTransition('geometryTransition'+getIcon(this.item) )
.sharedTransition('sharedImage' + getIcon(this.item) + this.item, {duration: 300 });
Text(getContent(this.item)).fontSize(this.fontSize).maxLines(3).textOverflow({overflow: TextOverflow.Ellipsis})
}
.alignItems(HorizontalAlign.Start)
}
}
有两种解决方法:
①按引用传递参数
class Tmp {
icon: string = ''
item: number = 0
}
@Builder
itemBuild($$: Tmp) {
Image($r($$.icon))
.objectFit(ImageFit.Fill)
.geometryTransition('geometryTransition'+$$.icon )
.sharedTransition('sharedImage' + $$.icon + $$.item, {duration: 300 });
}
this.itemBuild({icon: getIcon(this.item), item: this.item})