当前位置:   article > 正文

Android动态配置network_security_config

network_security_config

相信目前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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

通过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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

network_security_config_release :

<network-security-config>
    <base-config cleartextTrafficPermitted="false"/>
</network-security-config>
  • 1
  • 2
  • 3
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"
            ]
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
3、

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

<application
    android:networkSecurityConfig="${network_security_config}"
    ... >
    ...
</application>
  • 1
  • 2
  • 3
  • 4
  • 5

这样就可以动态配置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"
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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

<application
    ... 
  android:networkSecurityConfig="@xml/network_security_config"
    ... >
    ...
</application>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/115241
推荐阅读
相关标签
  

闽ICP备14008679号