Android P 网络请求相关总结
code小生,一个专注 Android 领域的技术平台
公众号回复 Android 加入我的安卓技术群
作者:Jeremy_Ji
链接:https://www.jianshu.com/p/67bfd401327f
声明:本文已获Jeremy_Ji
授权发表,转发等请联系原作者授权
这上半年几家手机厂商可以堪称神仙打架,小米9,iqoo,华为,oppo,三星等等都首发Android P系统。咱也是几经考虑终于换上了新手机,也体验一下这Android9.0(原来是Android6的一台nubia)。然后迫不及待跑了一下自己写的几个app,这一跑然后就出问题了。
Android 9 wifi传输
在Android9上面连接到Pentax相机的wifi时候,但是无法传输文件,无法获取单反sd卡的缩略图等,会报如下错:
No Network Security Config specified, using platform defaultdefault
后来通过查阅官网,发现Google在Android P上面禁止了明文http传输,也就是默认的是使用https而不是http。而且官方也是给出了解决方案。可以参考官方详情,我在这里简单总结一下
1. 添加安全配置文件
首先在res/xml文件夹下创建文件network_security_config.xml文件,然后添加可以信任的域名或者ip。
<?xml version="1.0" encoding="utf-8"?><network-security-config> <domain-config> <domain includeSubdomains="true">example.com</domain> </domain-config></network-security-config><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"
降低api版本,在27或者以下都可以使用明文http传输。但是作为开发者这样是没有太大意义的。
访问自己搭建的后台
另一个项目是通过Android访问自己搭建的web服务器。同样会出现报错,通过上面的两种方法是可以解决问题的。这里还有第三种方法,那就是手动添加ssl证书
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需吧生成的文件放在与配置文件相同目录下#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.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
这样是因为添加完https之后如果使用java.net或者Android进行访问的话还是需要添加信任。java应用的话需要将证书添加到支持。可以从网站下载二进制文件。首先点击上图的证书之后点击复制到文件
之后点击下一步,选择der文件格式的证书。使用该命令可以导入到本地的cacerts证书库
keytool -import -alias vbooking -keystore cacerts -file ${JAVA_HOME}/jre/lib/security/vbooking.cer${JAVA_HOME}/jre/lib/security/vbooking.cer
之后不管是在本地跑java测试还是,用到java.net.HttpURLConnection本地是不会报错的。Android端的话在网络安全配置文件中res/raw/my_ca中添加刚才生成的DER格式证书。
<?xml version="1.0" encoding="utf-8"?><network-security-config> <domain-config> <domain includeSubdomains="true">example.com</domain> <trust-anchors> <certificates src="@raw/my_ca"/> </trust-anchors> </domain-config></network-security-config><network-security-config> <domain-config> <domain includeSubdomains="true">example.com</domain> <trust-anchors> <certificates src="@raw/my_ca"/> </trust-anchors> </domain-config></network-security-config>
其中需要注意的一点就是,在Android端使用网路请求时候不能在ui主线程中使用网络请求,应该在AsyncTask中来调用,关于AsyncTask的使用之前也总结过。另外一点是需要在添加网络请求权限。
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
推荐阅读
Android 一起来看看 7.0 的新特性 FileProvider
Android 系统各个版本上https的抓包
程序设计的关键思维是
逻辑和实现
Android P 网络请求相关总结相关推荐
- http请求过程 Android,android HTTP网络请求回顾
1.HTTP协议了解 http是一种应用层的协议,底层通过TCP来进行可靠的数据传输.HTTP是基于TCP的应用层协议,它在更高的层次封装了TCP的使用细节,使网络请求更加易用,TCP连接是因特网基于 ...
- Android okHttp网络请求之缓存控制Cache-Control
前言: 前面的学习基本上已经可以完成开发需求了,但是在项目中有时会遇到对请求做个缓存,当没网络的时候优先加载本地缓存,基于这个需求我们来学习一直okHttp的Cache-Control. okHttp ...
- android之网络请求 -- 获取RecyclerView的列表项(图片 + 文字)
android之网络请求 -- 获取RecyclerView的列表项 示意图,网络请求的地址,插件及依赖 代码架构 代码内容 MainActivity.java activity_main.xml R ...
- 【小王的安卓之路】Android原生网络请求
Android原生网络请求 一. 网络请求的必要性 二. 网络请求分类 三. 网络请求实现方法 四. 注意事项 一.网络请求的必要性: 如今单机APP早已经接近消失就连最简单的时钟日期等软件都需要去请 ...
- 『Android』网络请求数据与JSON解析
『Android』网络请求数据与JSON解析
- 利用Fiddler对Android手机网络请求进行抓包
在Android的开发调试过程中,特别是针对网络编程的情况,很多时候我们希望能够对Android的网络请求进行抓包,用来定位以及分析我们程序的问题.下面我介绍使用Fiddler对Android模拟器的 ...
- fiddler 只监听模拟器_利用Fiddler对Android模拟器网络请求进行抓包【转】
在Android的开发调试过程中,特别是针对网络编程的情况,很多时候我们希望能够对Android的网络请求进行抓包,用来定位以及分析我们程序的问题.下面我介绍使用Fiddler对Android模拟器的 ...
- android okgo 网络请求框架
OkGo - OkHttpUtils-2.0.0升级后改名 OkGo,全新完美支持RxJava 项目地址:https://github.com/jeasonlzy,欢迎star,欢迎issue 该库是 ...
- android封装网络请求界面,轻松搞定 android MVP 架构、okHttp 网络模块封装 的 项目...
CommonMvp commonMvp 能做什么? 1.mvp 实现 model view presenter 业务和界面解耦 2.整合 网络 请求 3.简化网络调用流程 4.整合状态栏和标题栏 实现 ...
- android自定义网络请求框架,安卓快速开发框架(十九)XBaseAndroid Http网络请求
网络请求 XBaseAndroid网络请求内置模块是采用hongyangAndroid的工具类二次开发. 目前对应okhttp版本3.3.1. 用法 目前对以下需求进行了封装 一般的get请求 一般的 ...
最新文章
- UA OPTI512R 傅立叶光学导论7 线性平移不变系统简介
- mybatis默认的数据源连接池(PooledDataSource和UnPooledDataSource)
- 无重复字符的最长子串—leetcode3
- 理解C++中拷贝构造函数
- 一份清华大佬的代码模版,简洁易懂!
- 2017-06-23
- 修改oracle数据库的编码为utf-8
- mysql workbench uml_Ubuntu 16.04下UML建模PowerDesigner的替代ERMaster和MySQL Workbench
- 跨平台的移动Web应用开发平台 PhoneGap 1.6 发布
- 【转】IE内嵌google chrome frame解决浏览器兼容问题
- 行情数据接口-美股版
- Linux安装pyaudio
- WAP1 X/WAP2 0以及WAP浏览器的协议版本
- vue使用lodop打印控件实现浏览器兼容打印
- 计算机网络(5.13)运输层- TCP的拥塞控制方法
- 支付宝网关支付模式详细解答
- yzy的欢乐膜你赛后,一份迟来的个人(蒟蒻)思路解析
- 基于ssm整合的网上书城
- 宏碁公司再次遭遇入侵,160GB敏感数据泄露
- KSO - docker部署Rabbitmq的详细讲解以及各种隐藏坑