最近更新了android studio,以及到gradle和android sdk版本 ;
手機Pixel 2 xl,系統(tǒng)Android P;
網(wǎng)絡(luò)請求okhttp3,每次網(wǎng)絡(luò)請求總是:
java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security policy
官網(wǎng)文檔:
Android致力于保護(hù)用戶肛冶,他們的設(shè)備和數(shù)據(jù)安全瞬内。我們保證數(shù)據(jù)安全的方法之一是保護(hù)所有進(jìn)入或離開Android設(shè)備的數(shù)據(jù)在傳輸中使用傳輸層安全性(TLS)婆殿。正如我們在Android P開發(fā)人員預(yù)覽中所宣布的那樣,我們通過阻止針對Android P的應(yīng)用程序默認(rèn)允許未加密的連接來進(jìn)一步改進(jìn)這些保護(hù)漆羔。
這是我們多年來為更好地保護(hù)Android用戶而做出的各種更改梧奢。為了防止意外的未加密連接,我們android:usesCleartextTraffic在Android Marshmallow中引入了manifest屬性演痒。在Android Nougat中亲轨,我們通過創(chuàng)建Network Security Config功能擴展了該屬性,該功能允許應(yīng)用程序指示他們不打算在沒有加密的情況下發(fā)送網(wǎng)絡(luò)流量鸟顺。在Android Nougat和Oreo中惦蚊,我們?nèi)匀辉试S明文連接。
看來以后都要用https了讯嫂,在Android P系統(tǒng)的設(shè)備上蹦锋,如果應(yīng)用使用的是非加密的明文流量的http網(wǎng)絡(luò)請求,則會導(dǎo)致該應(yīng)用無法進(jìn)行網(wǎng)絡(luò)請求欧芽,https則不會受影響莉掂,同樣地,如果應(yīng)用嵌套了webview千扔,webview也只能使用https請求憎妙。
目前找到的解決辦法:
1:改用https
2:targetSdkVersion改為27以下
3:在res的xml目錄下,新建一個xml文件(名稱自定義,如:network_security_config.xml)曲楚,
內(nèi)容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...
/>
更多參考:https://android-developers.googleblog.com/2018/04/protecting-users-with-tls-by-default-in.html