Android 9 适配遇到的坑及解决方案
最近在思考个问题-----APK 运行权限与文件系统权限的区别是什么?
在适配Android 9 上遇到的问题来啦!!!!Android 10 适配问题总结持续中....
问题1:Http请求失败SSL handshake timed out
解决办法:
Android 9.0 开始,默认不允许明文传输,所以在建立网络连接时会使用 https 连接,同时进行安全认证。如果应用没有做对应处理,即会发生上述异常。在应用中的res/xml目录添加network_security_config.xml文件。内容如下:
接着在androidManifest.xml文件的<Application>标签里面添加android:networkSecurityConfig="@xml/network_security_config"即可解决此问题
以上这是一种简单粗暴的配置方法,要么支持http,要么不支持http。为了安全灵活,我们可以指定支持的http域名:
问题2:Apache HTTP 客户端弃用
在 Android 6.0 时,就已经取消了对 Apache HTTP 客户端的支持。 从 Android 9.0 开始,默认情况下该库已从 bootclasspath 中移除,但是耐不住有些SDK中还在使用,导致Android p 设备报错java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion
解决办法:
在androidManifest.xml文件的<Application>标签的内部,添加一个子标签,内容为
<uses-library android:name="org.apache.http.legacy" android:required="false" />
问题3:FOREGROUND_SERVICE 权限,引发 SecurityException
问题4:启动Activity异常
在9.0 中,不能直接非 Activity 环境中(比如Service,Application)启动 Activity,否则会崩溃报错;
这类问题一般会在点击推送消息跳转页面这类场景,解决方法就是 Intent 中添加标志FLAG_ACTIVITY_NEW_TASK。