本文主要是从官方文档中筛选出一些常见的适配项,若有任何纰漏或需要补充的,欢迎大家在评论区指出。
1。限制HTTP网络请求
Android 9.0中限制了HTTP(明文传输)网络请求,若仍继续使用HTTP请求,则会在日志中提示以下异常(只是无法正常发出请求,不会导致应用崩溃):
java.net.UnknownServiceException: xxx明文通信网络安全策略不允许的
适配的方法如下:
第一种
在资源目录中新建一个xml文件作为网络安全配置文件,例如xml/network_security_config.xml,然后在文件中填写以下内容:
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; & lt; network-security-config> & lt; base-config cleartextTrafficPermitted=" true "/比; & lt;/network-security-config> >之前,在AndroidManifest.xml进行配置:
& lt;应用程序 … android: networkSecurityConfig=癅xml/network_security_config”比; … & lt;/application>第二种(感谢AllenChiang同学的提醒)
Android 6.0中引入了是否允许网络使用明文传输的配置:
& lt;应用android: usesCleartextTraffic=[“true”|“false”)在原来默认为真实,但在Android 9.0中默认值改为了假,因此将配置手动设为true即可解决明文传输被限制的问题
由于官方在Android 9.0中移除了所有Apache HTTP客户机相关的类,因此我们的应用或是一些第三方库如果使用了这些类,就会抛出找不到类的异常:
. lang。NoClassDefFoundError:失败的决议:Lorg/apache/http/康涅狄格州/计划/SchemeRegistry;若需要继续使用Apache HTTP客户端,可通过以下方法进行适配:
在AndroidManifest。xml中添加以下内容:
& lt; uses-library android: name=" org.apache.http。遗产”android:要求=" false "/祝辞或者在应用中直接将Apache HTTP客户机相关的类打包并进行引用
3.1简述
一直以来,官方提供的接口分为了SDK接口和非SDK接口.SDK接口即官方支持的接口,开发者可以直接调用不会有任何限制。一般而言,SDK接口都记录在官方的接口索引中,没有记录的就视为非SDK接口,例如一些使用了@hide标注的方法。
以往开发者对于非SDK接口的调用通常是利用反射或者JNI间接调用的方式进行,但这样的调用方式如果处理不当会比较容易出现一些未知的错误。为了提升用户体验和降低应用发生崩溃的风险,Android 9.0对应用能使用的非SDK接口实施了限制,具体的限制手段请见下表: