問題
在Android 9.0手機使用OkHttp請求一個http位址,會報如下錯誤。
java.net.UnknownServiceException: CLEARTEXT communication to **** not permitted by network security policy
原因是Android 9.0以後,Google官方解釋:
為保證使用者資料和裝置的安全,Google針對下一代 Android 系統(Android P) 的應用程式,将要求預設使用加密連接配接,這意味着
Android P 将禁止 App 使用所有未加密的連接配接,是以運作 Android P
系統的安卓裝置無論是接收或者發送流量,未來都不能明碼傳輸。
三種解決辦法
- APP 改用 https 請求
- argetSdkVersion 降到27以下更改
- 網絡安全配置
第三種方法實作
在res檔案夾下建立一個xml檔案夾,然後在xml目錄下建立一個network_security_config.xml檔案,檔案内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
android:networkSecurityConfig="@xml/network_security_config"