鸿蒙 NEXT WebView 套壳方案:解决文件上传与相机调用问题
背景:从网页到 App 的迁移挑战
之前一直在维护一个 Web 项目,出于业务展示需求,需要将其打包成 APP。在鸿蒙 4.2 时代,这其实非常简单:找一个安卓 WebView 套壳应用,用 MT 管理器修改 URL 配置,基本就能跑通。这套方案稳定运行了一年多,几乎没有出现过问题。
痛点:鸿蒙 NEXT 的文件上传限制
直到今年(2026),随着新设备 Mate80 Pro Max 升级到 鸿蒙 6(HarmonyOS NEXT),问题突然爆发。
虽然可以通过'卓易通'兼容运行之前的安卓壳子,但核心功能失效了:文件上传直接废了。
具体表现如下:
<input type="file">按钮依然可以点击;- ❌ 无法调用系统相机拍照;
- ✅ 只能从本地相册选择图片。
原本的业务场景是支持现场拍照上传的,现在这个流程被切断了。点击选图后,系统会直接跳转到文件管理页面,而不是唤起相机界面。
原因分析:隐私安全策略收紧
查阅文档并分析后发现,根本原因在于鸿蒙 NEXT 的安全模型调整:
- 不再允许 WebView 直接调用系统相机;
- H5 的文件选择请求需要宿主应用手动拦截;
- 由原生代码负责调起相机或相册,拿到结果后再回传给网页。
简单来说,以前安卓是'自动帮你做',现在鸿蒙要求'你自己写一套流程'。
排查过程:现有方案的局限性
为了解决这个问题,尝试过几种常见路径,但都不理想:
方案一:找现成的鸿蒙 WebView 套壳
结论:❌ 没找到能用的。 市面上要么不支持文件上传回调,要么根本不是针对鸿蒙 NEXT 原生的版本。
方案二:反编译原来的安卓壳子改
思路是修改 WebView 相关代码中的文件选择逻辑。 问题:❌ 太麻烦,且不一定能编译成功,维护成本过高。
方案三:前端绕过(JS 调相机)
比如尝试用 H5 API 直接调用摄像头。 问题:❌ 如果壳子本身没有权限,前端代码同样无效。
必要性:开发效率与验证需求
有人可能会说:'那你用旧手机不就行了?'
实际工作中,我们需要频繁修改网页功能,必须实时验证在 APP 里的效果。总不能天天带两台手机来回切换开发吧,这完全不现实。
解决方案:构建原生 ArkTS 壳
被逼无奈,最终决定自己上手,用 ArkTS 写了一个 HarmonyOS NEXT 原生 WebView 套壳应用。
这个项目实现了以下核心功能:
- ✅ WebView 全屏加载网页;
- ✅ 支持 JS / DOM Storage / 图片访问;


