【每日学点鸿蒙知识】私仓搭建、resources创建文件夹、hvigor如何动态设置版本、SM3摘要算法、SP存储报错等
1、OH私仓如何创建?
可以参照以下文档来搭建OH私仓:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-ohpm-repo-quickstart-V5
2、resources->base->media中不可以新建文件夹?
项目图片路径resources->base->media中不可以新建文件夹,图片全平级放里面,查找图片不方便,有没有什么其他的办法解决这个难点?
resources目录下可用于存放图片的目录有resources/*/media
以及 resources/rawfile
。
可以使用rawfile来创建文件夹放置图片。
rawfile支持创建多层子目录,目录名称可以自定义,文件夹内可以自由放置各类资源文件。
需要注意:
- rawfile不会根据设备所处的环境去匹配不同的资源
- rawfile 中源文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID,通过指定文件路径和文件名引用
3、hvigor如何动态设置versionName和VersionCode?
参考我们之前的版本定义,VersionName分4段,前3段是人为配置到的,第4段是通过执行'git rev-list --count HEAD'
得到的,而VersionCode也是通过VersionName所配置的前3段动态生成的。
在HarmonyOS原生,或者说在hvigor中如何实现这样的VersionName、VersionCode的动态生成?
请参考版本归一指令(versionNormalize),文档链接: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/packing-tool-V5#版本归一指令versionnormalize
4、HarmonyOS的SM3摘要算法结果转字符串乱码?
// SM3Hash
export async function SM3Hash(plainText: string): Promise<string> {
let mdAlgName = 'SM3'; // 摘要算法名
let md = cryptoFramework.createMd(mdAlgName);
// 数据量较少时,可以只做一次update,将数据全部传入,接口未对入参长度做限制
await md.update({ data: new Uint8Array(buffer.from(plainText, 'utf-8').buffer) });
let mdResult = await md.digest();
console.info('Md result:' + mdResult.data);
return uint8ArrayToString(mdResult.data);
}
使用的uint8ArrayToString方法为解密中解码的方法,在此应该用转base64或在十六进制数据base64格式字符串:new util.Base64Helper().encodeToStringSync(str)
十六进制字符串:buffer.from(data).toString('hex')
5、Preferences存储json格式字符串时报错?
Preferences存储json格式字符串时报错 ,
无论是转成
let uInt8Array = new util.TextEncoder().encodeInto(value);
this.preferences.putSync("asd" , uInt8Array)
还是直接
this.preferences.putSync("asd" ,value)
都会报错 Parameter error. The type of 'value' must be ValueType.
value值过长导致的,首选项value的最大长度限制为8192个字节。可考虑使用kv数据库或者rdb进行储存。