从鸿蒙4.2到鸿蒙NEXT踩坑实录:一个文件上传逼我重写APP
升级到鸿蒙NEXT后,原有WebView套壳应用无法调用相机上传图片,只能从相册选择。由于鸿蒙对H5文件选择做了权限限制,需要原生拦截处理。为解决该问题,基于ArkTS开发了一个原生WebView套壳模板,实现拍照/相册上传,并支持一行URL快速打包网页为鸿蒙APP。
本文使用AI生成!
一、事情的起因(真实踩坑)
我之前一直在做一个网页项目,但因为业务展示的原因,需要打包成 APP 使用。
在鸿蒙 4.2 的时候,这件事其实非常简单:
- 找一个安卓 WebView 套壳 APP
- 用 MT 管理器改一下 URL
- 直接就能用了
整个流程几乎是“无脑操作”,而且这个方案稳定跑了一年多,没有任何问题。
二、问题爆发:升级鸿蒙 NEXT 后直接炸了
直到今年(2026),我换了新手机(Mate80ProMax),系统直接升级到了 鸿蒙 6(HarmonyOS NEXT)。
问题就来了。
虽然可以通过“卓易通”兼容运行之前的安卓壳子,但是:
❗ 文件上传直接废了
具体表现是:


这对我来说是致命问题,因为我的业务是需要现场拍照上传的。
三、为什么会这样?(踩坑分析)
我后面查了一圈 + 问 AI,大概原因是:
👉 鸿蒙 NEXT 出于隐私安全考虑:
-
不再允许 WebView 直接调用系统相机
-
H5 的文件选择需要宿主应用手动拦截
-
再由原生代码去:
- 调起相机 / 相册
- 拿到结果
- 回传给网页
简单说就是:
👉 以前安卓是“自动帮你做”,现在鸿蒙是“你自己写一套流程”
四、我尝试过的几个方案(全踩坑)
方案1:找现成鸿蒙 WebView 套壳
结论:
❌ 没找到能用的
要么:
- 不支持文件上传回调
- 要么压根不是鸿蒙 NEXT 原生
方案2:反编译原来的安卓壳子改
思路是:
- 找 WebView 相关代码
- 修改文件选择逻辑
问题:
❌ 太麻烦,而且不一定能编译成功
方案3:前端绕过(JS 调相机)
比如:
- 用 H5 API 直接调用摄像头
问题:
❌ 如果壳子没权限,一样没用
五、为什么必须解决?
有朋友可能会说:
那你用旧手机不就行了?
问题是:
- 我现在要频繁改网页功能
- 必须实时验证在 APP 里的效果
- 总不能天天带两台手机开发吧…
👉 这完全不现实
六、最终决定:自己写一个鸿蒙原生壳
被逼无奈,我直接上手:
✅ 用 ArkTS 写了一个 HarmonyOS NEXT 原生 WebView 套壳应用
于是这个项目就诞生了👇
七、这个项目能做什么?
简单说一句话:
👉 改一个 URL,就能把网页打包成鸿蒙 APP
目前已经做了这些功能:
- ✅ WebView 全屏加载网页
- ✅ 支持 JS / DOM Storage / 图片访问
- ✅ 文件上传支持(相机 + 相册)
- ✅ 返回键拦截(网页返回 + 双击退出)
- ✅ 启动页(Splash)
- ✅ 权限自动申请(相机 / 相册)
- ✅ 沉浸式体验(隐藏导航条)
八、最关键:文件上传问题已解决 ✅
重点来了:
👉 现在可以正常:
- 📸 直接拍照上传
- 🖼️ 相册选择上传
也就是把鸿蒙 NEXT 缺失的那一段:
“WebView → 原生 → 相机 → 回传”
👉 全部补齐了
九、项目地址
👉 GitHub:项目地址
https://github.com/ZhaoYuLiOfficial/HarmonyOS6-WebView-Shell
👉 Gitee:项目地址
https://gitee.com/ZhaoYuLiOfficial/HarmonyOS6-WebView-Shell
(如果对你有帮助,欢迎点个 Star ⭐)
十、总结
这次踩坑最大的感受就是:
👉 鸿蒙 NEXT 对安全收得很紧,但开发成本确实上来了
以前安卓一句话能搞定的事情:
现在需要自己补一整套逻辑。
不过好处是:
- 权限更清晰
- 行为更可控
🤝 交流 & 反馈
如果你也在做类似的项目,或者遇到类似问题:
- 欢迎留言交流
- 也可以提 Issue 一起讨论
本文使用AI生成,大神们轻点喷,大学生第一个开源项目呜呜
更多推荐



所有评论(0)