写点什么

Android P 网络请求相关总结,flutter 二维码扫描插件

用户头像
Android架构
关注
发布于: 刚刚

后来通过查阅官网,发现 Google 在 Android P 上面禁止了明文 http 传输,也就是默认的是使用 https 而不是 http。而且官方也是给出了解决方案。可以参考官方详情,我在这里简单总结一下


1. 添加安全配置文件


首先在 res/xml 文件夹下创建文件 network_security_config.xml 文件,然后添加可以信任的域名或者 ip。


<?xml version="1.0


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


" encoding="utf-8"?>


<network-security-config>


<domain-config>


<domain includeSubdomains="true">example.com</domain>


</domain-config>


</network-security-config>


或者添加默认可以使用明文传输。之后在 AndroidMainfest.xml 中 application 下添加下面属性


android:networkSecurityConfig="@xml/network_security_config"


  1. 降低 api 版本,在 27 或者以下都可以使用明文 http 传输。但是作为开发者这样是没有太大意义的。

访问自己搭建的后台

另一个项目是通过 Android 访问自己搭建的 web 服务器。同样会出现报错,通过上面的两种方法是可以解决问题的。这里还有第三种方法,那就是手动添加 ssl 证书


  1. spring boot 配置 ssl 证书实现 https 访问


可以使用 java 自带的证书生成工具来实现,首先打开 cmd 终端,输入命令来产生 ssl 证书


keytool -list -keystore server.p12


之后会提示输入不少于六位的密码,之后还需要重复输入,以及填写其他信息等。按照步骤来就行,关键就是要记住密码。spring boot 中在配置文件 application.properties 中添加几条配置


#需吧生成的文件放在与配置文件相同目录下


#server.ssl.key-store=classpath:keystore.p12


#配置证书密码


#server.ssl.key-store-password=111111


##server.ssl.keyStoreType=PKCS12


#可以手动指定端口,否则使用默认的 8443 端口


#server.ssl.keyAlias:tomcat


之后重启项目可以看见服务端!



由于证书是自己创建的所以肯定为无效证书


添加证书的信任

之后我使用 java 跑测试时候又报了这样的错误


avax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present


这样是因为添加完 https 之后如果使用 java.net 或者 Android 进行访问的话还是需要添加信任。java 应用的话需要将证书添加到支持。可以从网站下载二进制文件。首先点击上图的证书之后点击复制到文件

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android P 网络请求相关总结,flutter二维码扫描插件