1、用户首选项和kvstore都是异步保存和读取,有同步读取方式吗?
用户首选项和ohos.data.distributedKVStore (分布式键值数据库)设置和获取值,都是异步的吗,模拟器感觉还挺慢的(设置后,获取),有其他支持同步的kv数据保存方式吗?
用户首选项kvstore都是异步保存和读取,没有提供相关同步操作api。PersistentStorage是支持同步kv数据保存方式,持久化变量最好是小于2kb的数据,不要大量的数据持久化,因为PersistentStorage写入磁盘的操作是同步的,大量的数据本地化读写会同步在UI线程中执行,影响UI渲染性能。如果开发者需要存储大量的数据,建议使用数据库api
2、如何将项目的compileSdkVersion升级到api12?
build-profile.json5中目前为
“compileSdkVersion”: “4.1.0(11)”,
“compatibleSdkVersion”: “4.1.0(11)”,
SDK、模拟器、开发工具已经升级完成,但是项目如何升级至 api12
可以先在IDE上面创建一个新的工程,获取工程的Compile SDK 、 Compatible SDK版本号(如:5.0.0(12))。 然后前往项目中的build-profile.json5 文件修改 对应的参数如下
“compileSdkVersion”: “5.0.0(12)”,
“compatibleSdkVersion”: “5.0.0(12)”,
最后rebuild project 注意:hvigor-config.json5这个文件里面的内容,可能也要改变。如果编译报错,提示hvigor不对,可以根据IDE提示去修改成新版本。或者自己手动修改.
3、HarmonyOS AES 解密问题?
在 app内需要用到 aes 加解密,使用的是 Crypto Architecture Kit,加解密的代码差异其实并不大,我基本都抄的官方文档代码,加密已调通,但是解密会报错decoder.doFinal()的位置会报错
请参考如下demo:
import cryptoFramework from '@ohos.security.cryptoFramework';
import buffer from '@ohos.buffer';
function genIvParamsSpec() {
let dataIv = convertStringToUint8Array('8NONwyJtHesysWpM')! //new Uint8Array(arr);
let ivBlob: cryptoFramework.DataBlob = { data: dataIv };
let ivParamsSpec: cryptoFramework.IvParamsSpec = {
algName: "IvParamsSpec",
iv: ivBlob
};
return ivParamsSpec;
}
// 加密消息
async function encryptMessagePromise(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) {
let cipher = cryptoFramework.createCipher('AES128|CBC|PKCS7');
let iv = genIvParamsSpec();
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, iv);
let cipherData = await cipher.doFinal(plainText);
return cipherData;
}
// 解密消息
async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) {
let decoder = cryptoFramework.createCipher('AES128|CBC|PKCS7');
let iv = genIvParamsSpec();
await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, iv);
let decryptData = await decoder.doFinal(cipherText);
return decryptData;
}
async function genSymKeyByData(symKeyData: Uint8Array) {
let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData };
let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128');
let symKey = await aesGenerator.convertKey(symKeyBlob);
console.info('convertKey success');
return symKey;
}
async function aesCBC() {
let keyData = convertStringToUint8Array('sgg45747ss223455')!
let symKey = await genSymKeyByData(keyData);
let message = "This is a test,just";
let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
let encryptText = await encryptMessagePromise(symKey, plainText);
let decryptText = await decryptMessagePromise(symKey, encryptText);
if (plainText.data.toString() === decryptText.data.toString()) {
console.info('decrypt ok');
console.info('decrypt plainText: ' + buffer.from(decryptText.data).
4、如何设置代码区域字体不随着鼠标滚动而放大缩小?
设置方式:左上角file->settings->Editor->General 中的第一行 Change font size with Ctrl+Mouse Wheel in 取消勾选后点击Apply就可以了。
5、HarmonyOS系统提供的rawfile napi接口只能访问resources目录下的资源,无法访问resources同级的lib目录?
rawfile就只能访问rawfile,其他目录需要从ts侧传或者自己拼接。