Android动态配置network_security_config

news/2024/5/20 2:51:33 标签: android, gradle

相信目前Android开发中,基本上网络请求都是使用https协议的了,这样对我们的数据安全有了一定的保障。但是通常在测试阶段,测试人员往往需要进行抓包测试,可以实时查看数据请求情况。这就需要我们需要区分好生产环境和测试环境的网络安全配置了。这时就需要我们用到network_security_config的文件配置了。
下面有三种方法实现这个需求:

第一种: debug-overrides

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

通过debug-overrides来实现debug打包时,信任用户的证书,即可以实现代理抓包。

第二种:利用 manifestPlaceholders

这个方法类似于打渠道包的原理,通过gradle来动态配置不同的network_security_config文件。

1、创建network_security_config_debug,network_security_config_release

network_security_config_debug :

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

network_security_config_release :

<network-security-config>
    <base-config cleartextTrafficPermitted="false"/>
</network-security-config>

2、

在app模块的build.gradle文件中添加以下代码:

android {
    ...
    buildTypes {
        debug {
            ...
            manifestPlaceholders = [
                network_security_config: "@xml/network_security_config_debug"
            ]
        }
        release {
            ...
            manifestPlaceholders = [
                network_security_config: "@xml/network_security_config_release"
            ]
        }
    }
}

3、

在AndroidManifest.xml文件中添加以下代码:

<application
    android:networkSecurityConfig="${network_security_config}"
    ... >
    ...
</application>

这样就可以动态配置network_security_config了。

第三种:resValue

其实这种方法,和第二种是异曲同工的方法,都是利用gradle进行动态编译配置,只不过写法不一样罢了。
首先都是需要和第二步那样创建network_security_config_debug,network_security_config_release两个文件。
然后在app模块的build.gradle文件中添加以下代码:

android {
    ...
    buildTypes {
        debug {
            ...
           resValue "xml", "network_security_config", "@xml/network_security_config_debug"
        }
        release {
            ...
          resValue "xml", "network_security_config", "@xml/network_security_config_release"
        }
    }
}

然后在AndroidManifest.xml文件中添加以下代码:

<application
    ... 
  android:networkSecurityConfig="@xml/network_security_config"
    ... >
    ...
</application>

http://www.niftyadmin.cn/n/451073.html

相关文章

sqoop导入实战

Sqoop导入实战 Sqoop-import 案例1 表没有主键&#xff0c;需要指定map task的个数为1个才能执行 Sqoop导入原理: ​ Sqoop默认是并行的从数据库源导入数据。您可以使用-m或--num-mappers参数指定用于执行导入的map任务(并行进程)的数量。每个参数都取一个整数值&#xff0…

【AUTOSAR】UDS协议的代码分析与解读(十四)----UDS 控制 DTC 设置 85h

8.22 控制 DTC 设置 ControlDTCSetting (85h) 诊断工具使用此服务启用或禁用ECU中的诊断故障码(DTC) 设置。 8.22.1 报文格式 表 91 控制 DTC 设置服务的请求报文 Byte Name Cvt Value (Hex) #1 RequestServiceIdentifier M 85 #2 Subfunction[DTCSettingType] M 0…

基于pyqt5、mysql、yolov7、chatgpt的小麦病害检测系统的设计与实现(基础版)

基于pyqt5、mysql、yolov7、chatgpt的小麦病害检测系统设计与实现 一、界面设计1.1安装pyqt51.2创建用户子窗体1.3创建管理员主窗体1.4创建管理员子窗体1.5创建系统登陆界面 二、环境搭建2.1pyqt5工具配置2.2mysql5.7安装 三、编程实现3.1初始化数据库3.2创建用户数据库sdk文件…

mysql分页查询,两张表关联,已第一张表的数量分页,忽略笛卡尔积

现状&#xff1a; 日志有两张表&#xff0c;第一张是操作总览&#xff0c;第二张是详细记录&#xff0c;第一张表和第二张的关系是一对多的关系。 需要一次将这两个都查出来&#xff0c;分页按照第一张表进行分页&#xff0c;不包含第二张表的笛卡尔积&#xff1b;但是需要第二…

清微智能TX5368A与飞桨完成Ⅱ级兼容性测试,助力全行业智能化升级

近日&#xff0c;清微智能的高性能视觉芯片TX5368A与飞桨完成Ⅱ级兼容性测试&#xff08;基于Paddle2ONNX工具&#xff09;。测试结果显示&#xff0c;双方兼容性表现良好&#xff0c;整体运行稳定。这是清微智能加入“硬件生态共创计划”后取得的又一阶段性成果。 产品兼容性证…

嵌入式实时操作系统的设计与开发New(三)

启动流程 当Mini2440从NAND Flash启动时&#xff0c;因为NAND Flash无法作为程序运行的载体&#xff0c;所以S3C2440A芯片通过硬件机制将NAND Flash的开头4KB的内容自动复制到SRAM上&#xff0c;并将这4KB大小的SRAM映射为自身内存的BANK0&#xff0c;将这4KB大小的内容映射到…

【C++】C++11:线程库和包装器

C11最后一篇文章 文章目录 前言一、线程库二、包装器和绑定总结 前言 上一篇文章中我们详细讲解了lambda表达式的使用&#xff0c;我们今天所用的线程相关的知识会大量的用到lambda表达式&#xff0c;所以对lambda表达式还模糊不清的可以先将上一篇文章看明白。 一、线程库 在…

【Jquery】Jquery实现页面嵌套到客户项目框架里面,不需要登录,获取cookie并直接展示首页:

文章目录 一、效果图:二、实现思路:三、实现代码: 一、效果图: 二、实现思路: 需求&#xff1a;嵌套到别的客户项目框架里面&#xff0c;不需要登录直接展示首页 实现&#xff1a;在打开页面前&#xff0c;获取登录cookie&#xff0c;然后再打开页面 三、实现代码: <!DOCTYP…