美文网首页
Android P之后关于网络的小知识点

Android P之后关于网络的小知识点

作者: aserbao | 来源:发表于2019-08-08 20:21 被阅读0次

    如果你的应用之前使用http协议进行网络请求,那么这篇文章就是专门为你写的。

    为什么写这篇文章?

    今天公司同事找我,说我写的下载库出问题了,What?我写的代码会有问题?这一套代码都用了好几年了,经历过好几个公司了,你说有问题?开玩笑!拿过来一调试,好家伙,真给我报异常了。然后搜索一波,发现是Android P之后Google默认使用了TLS保护,赶快写出来和大家分享一波。

    现象

    在下载http开头的链接文本时,报:

    java.io.IOException: Cleartext HTTP traffic to npic.getremark.com not permitted
    

    结果

    下载不成功,报bug,我能怎么办?改呗。

    解决方案

    这里提供三种解决方案:

    • 第一种 偷懒型解决办法:因为是Android P之后才会有这种情况,所以我们将targetSdkVersion降到28以下就可以了。当然,最简单快捷的方案。除非急着上线就可以这么干。
    • 第二种 甩锅型解决办法:让后台将http修改为https,对,不是咱们的锅,凭啥让我改,你们改。
    • 第三种 老实巴交型:后台又不改,又不让改到28以下,好吧,只能自己改了,不过改这种东西,至少得要个两天工期(两分钟搞定)。

    好了,直接讲第三种解决方案,具体步骤如下:

    • 在res的xml文件夹下面创建一个名为aserbao_downloader_config.xml的文件。(名字随意)
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true" />//允许连接到任意不安全的域
    </network-security-config>
    
    • 在AndroidManifest.xml文件中的application节点下,添加android:networkSecurityConfig="@xml/aserbao_downloader_config"即可。

    好了,再运行一下,完美解决问题。

    扩充内容

    上面的创建文件内有注释叫做允许连接到任意不安全的域,那么如果想允许特定域咋整呢?不急,刚好官方文档有说,搬过来,比如想只支持aserbao.com这个域名进行明文链接,那么咱们可以这么写:

    <network-security-config> 
        <domain-config cleartextTrafficPermitted =“true”> 
            <domain includeSubdomains =“true”> aserbao.com </ domain> 
        </ domain-config> 
    </ network-security-config>
    

    好了,就写这么多吧,写多了怕消化不了,刚好8点整,不能在写了,看我的全职去了。

    参考链接

    相关文章

      网友评论

          本文标题:Android P之后关于网络的小知识点

          本文链接:https://www.haomeiwen.com/subject/tzpfjctx.html