Android P(9.0)httpネットワーク要求の問題(Cleartxt HTTP trffic to**not permitted)


1.はじめに
Googleは、ユーザーデータとデバイスの安全を保証するために、次世代Androidシステム(Android P)のアプリケーションに対して、デフォルトの暗号化接続の使用が要求されるとしています。これはAndroid PがAppが暗号化されていないすべての接続を使用することを禁止することを意味しています。Android Pシステムを実行するAndroidデバイスは、受信しても送信しても、将来は暗号化されないデバイスです。次世代(Transport Layer Security)トランスポート層のセキュリティプロトコルを使用する必要がありますが、Android NougtとOreoは影響を受けません。
したがって、Android Pでは、ネットワークにアクセスするとエラーが発生します。
W/System.err: java.io.IOException: Cleartext HTTP traffic to **** not permitted
OKHttpを使って要求すると出現します。
java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security policy 
明文伝送は禁止されていますが、基本的には分かります。httpsを通じてネットワーク要求ができます。httpは明文伝送なので、httpsは暗号化されて伝送されます。これは最初の解を引き出した。1.インターフェースをhttpsに変えます。ここにはもう2つのソリューションがあります。2.target SdkVersionを27以下の3つに下げてネットワーク構成を追加します。
具体的には、resの下にxmlディレクトリを追加し、network(u)という名前を作成します。securityconfig.xmlファイルの内容は以下の通りです。httpリクエストのオープンを許可するという意味です。




 


アプリのAndroid Manifest.xmlファイルのアプリタグに以下の属性を追加します。


2.その他
関連参照リンク
https://android-developers.googleblog.com/2018/04/protecting-users-with-tls-by-default-in.html https://android-developers.googleblog.com/2018/04/dns-over-tls-support-in-android-p.html