1、HarmonyOS JSON.stringify一个HashMap的问题?
let data = new HashMap<string, string>()
data.set("action", "test")
let text = JSON.stringify(data)
输出一个text={}
这边想添加多个并且不同的key和value,并返回json的字符串,如何实现呢?
可以参考以下代码:
const map1: HashMap<string, string> = new HashMap();
map1.set("a", "avalue");
map1.set("b", "bValue");
const jsonObject: Record<string, Object> = {};
map1.forEach((value, key) => {
if (key != undefined && value != undefined) {
jsonObject[key] = value;
}
})
const jsonString = JSON.stringify(jsonObject)
console.log('jsonString', jsonString)
2、HarmonyOS 页面高度发生变化?
在安全区域配置中,ExpandSafeArea仅针对当前组件生效,不会向父组件或子组件传递。因此使用过程中,所有相关组件必须配置该属性。
ExpandSafeArea的属性判断早于position属性生效。在使用过程中如果系统判断当前组件的位置不涉及安全区域(Position生效前),则ExpandSafeArea会失效。如Stack中放置组件,默认在居中位置,测试可能会出现ExpandSafeArea失效的情况。可以在父组件Stack配置alignContent为Alignment.Top
如果无法使能ExpandSafeArea,但是需要将组件部署在安全区内,可以通过将y坐标向上调整128px(-px2vp(128))强制将位置配置在状态栏上。
3、HarmonyOS 开放测试版本已通过自动审核,但用户列表中邀请链接还是未发送状态?
可以在华为应用市场的分发详情页面中手动触发邮件发送。 在华为应用市场的AGC中查看当前所有用户的邀请状态。可以给未收到邀请的测试用户重新发送邀请链接,并提醒他们参与测试。
4、希望在打包的 hap 中只带 arm64_v8a 的 .so 库,不知道在何种方法可以达到类似的效果?
项目中依赖了几个 har,这些 har 里面带了 arm64-v8a 和 x86_64 两种架构的 .so 库,希望在打包的 hap 中只带 arm64_v8a 的 .so 库,不知道在何种方法可以达到类似的效果?
目前只知道 buildOption.externalNativeOptions 中能配置 CMakeLists.txt 的 abiFilter,也许需要一个打包时的 abiFilter 配置来过滤掉 har 中特定架构的 so,类似 xxxx 中的:
xxxx {defaultConfig {ndk {abiFilters 'arm64-v8a', 'x86_64'}}}
可以参阅:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-hvigor-cpp-V5 可以在nativeLib-->filter-->excludes下配置排除某些.so例如:
//配置筛选依赖.so资源文件的过滤规则
"nativeLib": {
"filter": {
//按照.so文件的优先级顺序,打包最高优先级的.so文件
"pickFirsts": ["/1.so"],
//按照.so文件的优先级顺序,打包最低优先级的.so文件
"pickLasts": ["/2.so"],
//排除的.so文件
"excludes": [
"/3.so", //排除所有名称为"3"的so文件"
/x86_64/*.so //排除所有x86_64架构的so文件
],
//允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件
"enableOverride": true
}
}
5、HarmonyOS WebView和H5交互的问题?
目前其他平台开发中与H5进行数据交互的方式为:H5那边调用window.prompt()或者window.XXXX.postMessage()方法,原生这边通过WebView代理回调的方式,拿到H5传过来的jsonString,进行数据解析,获得提前约定好的方法名和参数,然后原生再去调用对应的方法,实现js调用原生方法的功能。请问HarmonyOS原生APP能够去接收prompt()或者postMessage()的消息回调么?
可以通过runJavaScript API,在页面加载后注入代理函数,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#onloadintercept10
可使用onPrompt 拦截 window.prompt(),参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#onprompt9