先扯两句
其实这篇文章在开始写之前是打算按照(转)去写的,而且也确实收藏了一个解决方案的链接: chinaboyliusir的Android 9 Pie:http及https的网络连接问题。当然,这里使用的解决方案是完全可以的,只是对于xml文件的创建位置,我在刚刚查到的时候没有反应过来在哪里创建。
如上图,无论在哪个目录下创建xml文件,添加“<network-security-config>”标签的时候通通报错,想必对于其他类似我这种菜鸟来说,到这也绝对一脸懵逼进行不下去了,后续又查了N多博客,但结果好像对于菜鸟都不太友好。最后不得不去android官网转了转才算是找到了解决方案。所以建议大家没什么事的时候,还是多去官网转转。
老规矩,先提供一下Android知识点——目录的链接,然后让我们进入正题。
正文
前面已经扯得差不多了,其实唯一缺的就是network_security_config.xml放在哪里的问题。但是写一篇博客,怎么也得凑个篇幅不是,所以放哪里的问题解决后,就来说说所设置参数的含义吧。
放啥
其实只要两步操作即可,首先创建一个network_security_config.xml文件,这里也遇到了我曾经懵逼的问题,在哪建?android官网中自然有答案:网络安全配置:
是不是都找到在哪里了?还不知道的看下图。
看这里!
找到位置就好办了,之后就看放什么了。如上面官网截图,可以看到domain-config标签是cleartextTrafficPermitted,对于这种纯英文的东西,最好的方法当然是翻译一下喽。
image.png
让我很感动的是,这个翻译百度竟然没有选择直译,不过这也更方便我们理解上面的代码了:
<网络安全配置>
<域名配置 允许明文传输="否">
<域名 包含子域="是">不允许明文传输的域名</域名>
</域名配置>
</网络安全配置>
这段内容的用途是:
应用可能需要确保所有与 secure.example.com 的连接始终是通过 HTTPS 完成,以防止来自恶意网络的敏感流量。
当然,上面的这段单纯的就是为了理解一下其中每一个标签的作用,既然明确了就可以上我们
<network-security-config>
<domain-config cleartextTrafficPermitted="true"/>
</network-security-config>
也就是全局允许明文传输,这样配置就可以使用了。
在哪?
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>
这段就没什么可纠结的了,在AndroidManifest.xml的application 添加android:networkSecurityConfig="@xml/network_security_config"即可。
警告
当然,大多数情况下,大家设置好了这个参数后,会出现上图警告,也就是说android:networkSecurityConfig是在api 24之后。我的个人比较偷懒,没有创建对应api的manifest目录,而是添加了tools:ignore="UnusedAttribute",忽略掉对应警告。
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
tools:ignore="UnusedAttribute"
... >
...
</application>
</manifest>
网友评论