如何解决 Android7.0之后部分手机无法抓包

本文提供两种解决方案,一是通过修改network_security_config.xml文件并添加信任所有证书的配置,二是调整build.gradle中的targetSdkVersion版本。这些方法能够解决Android 7.0以上版本手机HTTPS请求抓包及webview代理访问问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近,测试提出来这么一个问题,说公司android7.0以上的手机针对https请求没办法抓包,他们拿不到数据。很是尴尬。
好了进入正题,通过一波的查阅资料过后发现:android7.0+的版本新增了证书验证,https的安全证书手机端和电脑端都必须安装,这个是前提;又由于android手机多厂商系统定制的问题,可能有部分手机确实无法抓包,这里,
对于抓包的问题上,我们在给测试打包的时候要对我们的项目进行添加设置: 默认新任所有证书。
有两个方案都可以解决这个问题:

一、添加对应配置

这个操作其实是比较敏感的,线上不能带上这个配置;下面来说一下相关配置项:
1、在res-xml目录中创建一个名为 “network_security_config.xml”的文件夹:并且附上如下内容:

<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" overridePins="true" />
            <certificates src="user" overridePins="true" />
        </trust-anchors>
    </base-config>
</network-security-config>

2、在AndroidManifest里的标签中,添加代码:

android:networkSecurityConfig="@xml/network_security_config"

3、重新运行项目,然后使用Charles抓包,成功。(要是你抓包不成功,请百度一下,如何使用Charles抓包,并且进行相关配置)
关于android普通抓包的问题是解决了,发现一个新问题:android7.0以上的手机,开着网络代理访问不了详情页(webview)
我们需要在webview的WebViewClient中,将下面这行代码给注释掉

super.onReceivedSslError(view, handler, error);

这一段代码是为了忽略掉SSL证书错误,因为开启代理后网络会变得不安全,证书会错误,webview检测到证书错误之后就直接让webview白板,不请求任何数据。 这一节是为了忽略掉父类的处理,然后默认走下去。

转载自:https://www.jianshu.com/p/de011eeaffee

二、降低打包时候build.gradle的targetSdkVersion 版本,降低到24以下

可以查看如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion这篇文章了解targetSdkVersion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值