本文原创发布在华为开发者联盟社区,欢迎前往原帖【有搜必应】HarmonyOS TOP5热搜技术问题解析第五期 ,直接与知识贡献者进行交流。
本期热搜揭秘:
【编译工具】通过 build haps 编译生成的 HAP 包,应如何安装?
【系统】从 Windows 11 的 IPSec 第二层隧道协议(L2TP/IPsec)切换到鸿蒙系统后,应选择哪一种协议?
【编译工具】modelVersion、targetSdkVersion、compatibleSdkVersion 分别是什么意思?
期待您在论坛中继续发声:无论是提出新的疑惑、发表见解、或分享实战经验,都会为鸿蒙社区注入前行的力量,也是让我们做得更好的动力!若您存在疑惑,可使用社区-问答-"我要提问题"进行提问。问答专区-华为/鸿蒙开发者论坛
往期问题回顾:
问题一:通过 build haps 编译生成的 HAP 包,应如何安装?
通过 build haps 编译生成的 HAP 包,应如何安装?
解决方案:
场景一:单 HAP 包或 HSP 包安装
如果使用的是模拟器,直接把 HAP 包拖动到模拟器中即可完成安装。
如果使用的是真机,可以使用以下方式进行安装:
使用hdc应用管理命令命令,例如:
# 安装一个HAPhdc install E:\example.hap# 安装一个HSP hdc install E:\example.hsp2. 使用bm工具来进行安装,例如:
# 安装一个HAPbm install -p /data/app/ohos.app.hap# 覆盖安装一个HAPbm install -p /data/app/ohos.app.hap -r# 安装一个应用间共享库bm install -s xxx.hsp使用DevEco Testing工具,连接真机后,选择实用工具,点击开始投屏,点击右侧安装应用即可选择 HAP 包进行安装。
场景二:多个 HAP 包或 HSP 包同时安装
如果包含的 HAP 和 HSP 包不多,可以使用命令依次安装,但需要注意先安装 HSP 包再安装 HAP 包。
如果包多的情况,可以使用 bm install [-p filePath]命令同时安装 HAP 和应用内共享库。
# 同时安装HAP和应用内共享库bm install -p /data/app/简化安装步骤,可以将签名后的 hap 与应用内共享库 hsp 放在同一目录下,执行脚本安装,脚本实现参考:
@echo offsetlocal EnableDelayedExpansionset current_dir=%~dp0echo %current_dir%hdc shell rm -rf data/local/tmp/421e6d0e2f3d4c709f77e43e8c57cfb3hdc shell mkdir data/local/tmp/421e6d0e2f3d4c709f77e43e8c57cfb3for /r "%current_dir%" %%i in (*.hsp *.hap) do ( echo %%~nxi echo %%i hdc file send %%i "data/local/tmp/421e6d0e2f3d4c709f77e43e8c57cfb3/%%~nxi")hdc shell bm install -p data/local/tmp/421e6d0e2f3d4c709f77e43e8c57cfb3hdc shell rm -rf data/local/tmp/421e6d0e2f3d4c709f77e43e8c57cfb3echo Install Done!@pause如果 HSP 是应用间共享库,可使用 bm install [-p filePath] [-s hspDirPath] 命令同时安装 HAP 和应用间共享库。
# 同时安装使用方应用和其依赖的应用间共享库bm install -p aaa.hap -s xxx.hsp yyy.hsp原链接:通过 build haps 编译生成的 HAP 包,应如何安装?
问题二:WebView 如何拦截特定域名的请求?
WebView 如何拦截特定域名的请求?
解决方案:
【背景知识】
Web组件:提供具有网页显示能力的 Web 组件,@ohos.web.webview提供 Web 控制能力。
【参考方案】
可参考网页访问拦截示例,使用Web组件实现特定网页访问拦截。
通过Web组件的onLoadIntercept事件,在加载网页前触发拦截判断。
根据 canUrlAccess 方法判断是否能访问目标网址,如果禁止访问该网址,则跳转至拦截页。
Web({ src: this.url, controller: this.controller }).onLoadIntercept((event) => { let url = event.data.getRequestUrl(); // 获取访问目标网址 if (UrlUtils.canUrlAccess(url)) { // 判断是否能够访问该url return false; } else { this.controller.loadUrl($rawfile('blocked.html')); // 禁止访问,则跳转至拦截页 return true; }})问题三:layoutWeight 如何实现宽度拉伸?
layoutWeight 如何实现宽度拉伸?
解决方案:
【背景知识】
layoutWeight(value: number | string):设置组件的布局权重,使组件在父容器(Row/Column/Flex)的主轴方向按照权重分配尺寸。
父容器尺寸确定时,不设置 layoutWeight 属性或者 layoutWeight 属性生效值为 0 的元素优先占位,这些元素占位后在主轴留下的空间称为主轴剩余空间。设置了 layoutWeight 属性且 layoutWeight 属性生效值大于 0 的子元素会从主轴剩余空间中按照各自所设置的权重占比分配尺寸,分配时会忽略元素本身的尺寸设置。
仅在 Row/Column/Flex 布局中生效。
如果容器中有子元素设置了 layoutWeight 属性,且设置的属性值大于 0,则所有子元素不会再基于 flexShrink 和 flexGrow 布局。
【解决方案】
在 HarmonyOS 开发中,Row、Column和Flex支持通过layoutWeight属性动态调整子元素尺寸占比的核心容器,适用于需要灵活布局的场景:
Row 容器:水平布局(从左到右),通过 layoutWeight 设置子元素在水平方向的占比。
Row() { Button('左侧').layoutWeight(2) // 占据2/3宽度 Button('右侧').layoutWeight(1) // 占据1/3宽度}Column 容器:垂直布局(从上到下),通过 layoutWeight 设置子元素在垂直方向的占比。
Column() { Text('顶部').layoutWeight(1) // 占据1/2高度 Text('底部').layoutWeight(1) // 占据1/2高度}Flex 容器:结合 layoutWeight 实现多维比例分配(如水平、垂直或混合方向)。
Flex({ direction: FlexDirection.Row }) { Text('左').layoutWeight(3) // 水平方向占比3/5 Text('右').layoutWeight(2) // 水平方向占比2/5}问题四:从 Windows 11 的 IPSec 第二层隧道协议(L2TP/IPsec)切换到鸿蒙系统后,应选择哪一种协议?
针对鸿蒙系统的 VPN 原先 WIN11 的 IPsec 的第二层隧道协议(L2TP/IPsec),切换为鸿蒙之后应该是选择哪一个?
解决方案:
切换 HarmonyOS 可以选择添加 L2TP/IPSec PSK 或者 L2TP/IPSec RSA 替代 L2TP/IPSec。
【背景知识】
VPN,即虚拟专用网络(Virtual Private Network),是在公用网络上建立专用网络的一种技术。在 VPN 网络中,任意两个节点间的连接并非依赖传统专用网络所需要的端到端的物理链路,而是构建在公用网络服务商提供的平台(如 Internet)之上的逻辑网络。用户数据在这一逻辑链路中进行传输。
【解决方案】
VPN 功能支持以下几种协议:
IKEv2/IPSec MSCHAPv2
IKEv2/IPSec PSK
IKEv2/IPSec RSA
L2TP/IPSec PSK
L2TP/IPSec RSA
IPSec Xauth PSK
IPSec Xauth RSA
IPSec Hybrid RSA
OpenVpn
查看路径如下:
手机系统设置->VPN->添加 VPN 网络->类型。 选择 L2TP/IPSec PSK 或者 L2TP/IPSec RSA。
原链接:从 Windows 11 的 IPSec 第二层隧道协议(L2TP/IPsec)切换到鸿蒙系统后,应选择哪一种协议?
问题五:modelVersion、targetSdkVersion、compatibleSdkVersion 分别是什么意思?
modelVersion、targetSdkVersion、compatibleSdkVersion 分别是什么意思?
解决方案:
modelVersion
【含义】
标识开发态版本号(即当前开发环境使用的 DevEco Studio 配套工具版本)。
【说明】
该字段与开发工具的版本严格对应,例如 DevEco Studio 6.0.0.858 配套的 modelVersion 值为 6.0.0。
主要用于工具链兼容性校验,开发者无需手动修改。
compatibleSdkVersion
【含义】
标识应用/元服务运行所需兼容的最低 SDK 版本,应用/元服务不能安装在低于该版本的设备。当前支持的版本参考所有HarmonyOS版本。相关字段与应用兼容性关系参见应用兼容性说明。
【说明】
运行环境是 HarmonyOS 时,字段类型是字符串,配置示例:"compatibleSdkVersion": "6.0.0(20)"。
运行环境是 OpenHarmony 时,字段类型是数值,配置示例:"compatibleSdkVersion": 20。
targetSdkVersion
【含义】
标识应用/元服务运行所需目标 SDK 版本,是系统提供的前向兼容手段。如果新 SDK 版本中 API 行为发生变更,将应用/元服务安装到新系统后,可通过该字段提供向前兼容手段,在新系统版本保持老的 API 行为。
如未配置,默认与 compileSdkVersion 保持一致。当前支持的版本参考所有HarmonyOS版本。相关标签与应用兼容性关系参见应用兼容性说明。
【说明】
运行环境是 HarmonyOS 时,字段类型是字符串,配置示例:"targetSdkVersion": "6.0.0(20)"。
运行环境是 OpenHarmony 时,字段类型是数值,配置示例:"targetSdkVersion": 20。
modelVersion 不需要跟 targetSdkVersion 对应,由于compatibleSdkVersion字段即标识应用/元服务运行所需兼容的最低 SDK 版本,所以如果改动这些版本号,需要真机或者模拟器版本兼容最低 compatibleSdkVersion 版本。
原链接:modelVersion、targetSdkVersion、compatibleSdkVersion 分别是什么含义?





