使用webview外链打包apk,写入自签CA证书流程,解决app录音功能无法使用

先写诉求:需求是要将一个web链接打包成apk形式,尝试过Android studio一系列碰到好多问题,最后选择使用hbuilderx 来打包apk,外链里面用到录音功能,做过这块的同学大家应该都知道,录音权限是需要https来保证安全性的,本地开发输出的都是http协议的,所以只要不是以localhost域名来访问,浏览器都会提示无法录音,PC端也可以通过别的方法曲线救国(有linux需求的可以看看我另一篇),但是安卓端目前好像只能通过自签证书让设备信任app,跳过这一检测下面直接展示吧:

js 复制代码
tips: 浏览器要求在 **HTTPS** 下才能使用录音权限(如通过 `navigator.mediaDevices.getUserMedia` 调用麦克风),主要是出于**安全和隐私**的考虑。

要让 Android 系统信任你的自签名证书,有两个方法:


证书生成大家自己去搜搜网上都有现成的例子不过多赘述

方法一:手动安装证书(适合开发测试环境)

步骤如下:

  1. 生成自签名证书(.crt

    如果你已经有 .pem.cer,可以将其转换为 .crt

    vbscript 复制代码
    openssl x509 -outform der -in server.pem -out server.crt
  2. 拷贝 server.crt 到 Android 手机(通过微信、ADB、U盘等方式)

  3. 在手机上安装证书

    • 打开设置 → 安全 → 加密与凭据(不同品牌可能叫做"安全与位置"、"更多设置"等)
    • 找到 "安装证书" → "从 SD 卡安装" → 选择你拷贝进去的 server.crt
    • 给它起一个名字(如 MyCA),确认安装
  4. 重启设备或应用

安装后,Android 会将你的证书作为用户信任证书,WebView 可正常访问该 HTTPS 地址。


方法二:将证书嵌入 APK 并配置 network_security_config.xml(推荐)

步骤如下:

1. 创建 network_security_config.xml 文件

在你的项目根目录(或 unpackage/resources/android/res/xml/)创建:

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="false">
    <domain includeSubdomains="true">192.168.5.71</domain>
    <trust-anchors>
      <!-- 加载系统信任证书 -->
      <certificates src="system" />
      <!-- 加载你打包时包含的证书 -->
      <certificates src="@raw/my_ca" />
    </trust-anchors>
  </domain-config>
</network-security-config>

2. 将你的自签名证书(.crt 格式)重命名为 my_ca.crt 并放入 unpackage/resources/android/res/raw/ 目录中

确保目录结构是:

markdown 复制代码
unpackage/
└── resources/
    └── android/
        ├── res/
        │   └── raw/
        │       └── my_ca.crt
        └── xml/
            └── network_security_config.xml

3. 在 manifest.json 配置中引用这个文件

"app-plus""distribute""android" 配置中添加:

json 复制代码
"android": {
  ...
  "networkSecurityConfig": "res/xml/network_security_config.xml"
}

3、另外需要在manifest.json的安卓/iOS模块配置里面勾选record录音

4、在源码视图里面app-plus下面配置上(查漏补缺)

5、补充一个坑

有的安卓手机在打包时上列配置都配置了,录音功能可能还是没法使用,一直报错,可能就是要用户手动去手机设置-应用-找到你安装后的app手动设置录音权限就OK了(这个坑也是我遇到的,很隐蔽,顺着之前的思路根本想不到这一层,换了个思路试了一下就好了)

相关推荐
未来之窗软件服务1 分钟前
一体化系统(九)智慧社区综合报表——东方仙盟练气期
大数据·前端·仙盟创梦ide·东方仙盟·东方仙盟一体化
陈天伟教授3 小时前
人工智能训练师认证教程(2)Python os入门教程
前端·数据库·python
信看4 小时前
NMEA-GNSS-RTK 定位html小工具
前端·javascript·html
Tony Bai4 小时前
【API 设计之道】04 字段掩码模式:让前端决定后端返回什么
前端
苏打水com4 小时前
第十四篇:Day40-42 前端架构设计入门——从“功能实现”到“架构思维”(对标职场“大型项目架构”需求)
前端·架构
king王一帅4 小时前
流式渲染 Incremark、ant-design-x markdown、streammarkdown-vue 全流程方案对比
前端·javascript·人工智能
苏打水com5 小时前
第十八篇:Day52-54 前端跨端开发进阶——从“多端适配”到“跨端统一”(对标职场“全栈化”需求)
前端
Bigger5 小时前
后端拒写接口?前端硬核自救:纯前端实现静态资源下载全链路解析
前端·浏览器·vite
BD_Marathon5 小时前
【JavaWeb】路径问题_前端绝对路径问题
前端