項目在Android 9.0的手機上報錯java.io.IOException: Cleartext HTTP traffic to xxx not permitted
詳細信息如下:
java.io.IOException: Cleartext HTTP traffic to android.bugly.qq.com not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:258)
at com.tencent.bugly.proguard.ai.a(BUGLY:266)
at com.tencent.bugly.proguard.ai.a(BUGLY:115)
at com.tencent.bugly.proguard.al.run(BUGLY:355)
at com.tencent.bugly.proguard.ak$2.run(BUGLY:757)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
at java.util.concurrent.ThreadPoolExecutor.processTask(ThreadPoolExecutor.java:1187)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:784)
原因分析
Google針對 Android 系統(Android P) 的應用程序,將要求默認使用加密連接(TLS),目的是爲了保證用戶數據和設備的安全,因此在Android P系統中使用HttpUrlConnection進行http請求會出現上述問題。
解決辦法
方法1:
將app.gradle
中將targetSdkVersion
降到28以下
方法2:
將http請求改爲https請求,這種方案顯然不太現實,一般項目的測試環境都是http請求。
方法3(推薦):
修改AndroidManifest.xml
文件
1: 在res的xml文件中添加network_security_config.xml
2:文件內容在network-security-config
標籤中配置如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config xmlns:android="http://schemas.android.com/apk/res/android">
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
3:在AndroidManifest.xml
文件的applicaiton
標籤中配置networkSecurityConfig
引用xml文件