- 作者:老汪软件技巧
- 发表时间:2024-08-22 04:04
- 浏览量:
本文主要记录一下,开发鸿蒙应用中遇到的印象比较深刻的问题,在找相应的解决方案的时候,也花费了不少精力。记录一下,如果有遇到相似的问题的小伙伴可以共同交流下。
鸿蒙静态库开发,包体积异常变大问题
在开发静态库(.har)的时候,我们需要引用一个第三方的har包,第三方的的har包大小为 400KB,我们发布自己的har包时,发现我们的包体积达到了 1.1M,包体积异常变大了。
查看静态库结构,发现引用了两份第三方库
在oh-package.json5中,是通过file的形式引入的,将har包放在了ets的目录下了
分析问题:
ets目录下存放的源码,har在打包的时候,默认把ets目录下的所有文件进行拷贝,然后会将 dependencies下 file引用的文件拷贝到静态库根目录下的Hars文件夹中。这样会导致同一份har包会拷贝两份。
解决方案
将本地引用的har包放到 src目录下
引用路径改为
"dependencies": {
"xxxxxx": "file:./src/Hars/xxxxxx-1.0.0.har"
},
这样在打包发布之后,就不会存在两份的问题了
CustomDialogController 设置透明背景
使用 CustomDialogController来显示弹窗时,系统默认会有毛玻璃效果,导致无法设置成透明的背景,可以将 backgroundBlurStyle 设置为 BlurStyle.NONE
new CustomDialogController({
builder: SwitchDialog(),
width: 260,
alignment: DialogAlignment.Center,
autoCancel: false,
cornerRadius:borderRadiuses(8),
maskColor: "rgba(0,0,0,0.60)",
backgroundBlurStyle: BlurStyle.NONE
})
获取App的应用名
通过bundleInfo.appInfo.label获取到的值为 $string:app_name,需要通过 labelId在资源管理里面去查询下,才能得到app的应用名。
appName(){
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
const label = getContext(this).resourceManager.getStringSync(bundleInfo.appInfo.labelId)
return label
}
将Resource中的图片转化为PixelMap
private async getResourceContentPixelMap(resource: Resource){
let data = await getContext(this).resourceManager.getMediaContent(resource)
let arrayBuffer = data.buffer.slice(data.byteOffset, data.byteLength + data.byteOffset)
let fontImageSource: image.ImageSource = image.createImageSource(arrayBuffer);
let fontValue = await fontImageSource.getImageInfo();
let fontOpts: image.DecodingOptions = {
editable: true,
desiredSize: {
height: fontValue.size.height,
width: fontValue.size.width
}
};
let fontPixelMap = await fontImageSource.createPixelMap(fontOpts)
return fontPixelMap
}
将Base64图片转化为PixelMap
import { util } from '@kit.ArkTS';
private async base64ToPixelMap(imageBase64: string){
let helper = new util.Base64Helper();
let buffer: ArrayBuffer = helper.decodeSync(imageBase64, util.Type.MIME).buffer as ArrayBuffer;
let imageSource = image.createImageSource(buffer);
let opts: image.DecodingOptions = { editable: true };
let pixelMap = await imageSource.createPixelMap(opts);
return pixelMap;
}