签名与安装权限问题:V1/V2/V3 兼容性、未知来源、覆盖安装
「未安装应用」或「签名不匹配」
场景 1:用不同证书签名的 APK 尝试覆盖安装
错误信息:「应用未安装」或「签名与已安装版本不匹配」。
原因:Android 要求覆盖安装的 APK 必须和已安装版本使用相同的签名证书。
解决:
- 第一次打包某个应用时用哪个证书,以后更新就必须用同一个
- 如果证书丢了,先卸载旧版 APK 再安装新版(但旧版数据会丢失)
- 导出证书备份到安全位置,避免丢失
场景 2:V3 签名和老系统不兼容
V3 签名(Android 9.0+ 引入)在极少量 Android 7/8 的设备上可能不被识别。
解决:
- 在构建设置里只启用 V1 + V2 签名,关掉 V3
- 或检查设备的 Android 版本,V3 签名需要 Android 9.0+
「安装未知来源应用」被禁止
场景:点击 APK 文件没有弹出安装界面
原因:Android 8.0+ 不再是全局开关,而是按 App 授权。
解决:
- 打开系统设置 → 应用 → 找到用来打开 APK 的那个 App(可能是文件管理器、夸克网盘 App、浏览器)
- 点击「安装未知应用」
- 打开开关
注意:这个权限给下载来源 App,不是给 WebToApp。通过哪个 App 打开的 APK,就给哪个 App 授权。
构建器权限不足
场景:构建器打开文件管理器里找不到 APK
原因:Android 11+ 的分区存储(Scoped Storage)限制了应用的文件访问范围。
解决:
- 在系统设置里找到 WebToApp → 权限 → 存储
- 打开「允许访问所有文件」
- 或在 WebToApp 自己的设置里查找权限相关提示
后台服务被系统杀掉
场景:服务端运行时类型的 APK 切到后台后 HTTP 服务停止
原因:Android 的后台限制(Doze 模式、应用启动限制等)。
解决:
- 启用前台服务:通用配置 → 运行时 → 后台运行 → 开启「前台服务」
- 电池优化白名单:系统设置 → 电池 → 找到你的 APK → 选择「不限制」
- 自启动权限:某些国产系统(MIUI、EMUI、ColorOS)有额外的自启动权限设置,手动给 APK 打开
端口被占用
场景:多个服务端运行时应用尝试监听同一个端口
解决:
- 在每个应用的通用配置 → 运行时里指定不同端口
- 或者开启端口冲突的「自动换端口」策略
- 或者在 Linux 环境里手动杀掉占用端口的进程
APK 体积过大
场景:导出的 APK 好几百 MB
原因可能是:
- 内嵌了大型服务运行时二进制(Node.js 原生包约 30-50MB)
- 项目依赖了很多原生扩展
- 离线包类型抓取了大量图片/视频
优化建议:
- 离线包用图片压缩工具先压缩一遍
- 服务端运行时只放必要的依赖(不要把 node_modules 里的 devDependencies 一起打包)
- 开启资源加密(AES-GCM 不增加体积,但防止解包后被复制)
- 或者改为网页型 + 远程资源的方式(APK 体积会很小)