Pocket

targetSdkLevel=28にアップデートしたアプリを、AVD APIレベル=28、Android 9.0で動かしていたら、次のようなエラーで、ネットワーク通信に失敗していました。

W/System.err: java.io.IOException: Cleartext traffic not permitted: http://xxx

そのURLは、クリアテキスト、つまり暗号化していない通信は許可されていない、とのこと。APIレベル=28、Android 9.0以降、デフォルトで非SSL通信はできないんですね。

アプリが使っているURLのほとんどは、すでにhttpsに対応していました。リソース定義の文字列を、httpsに置き換えるだけですみました。

しかし、いくつかのURLはhttpsには対応していないので、アプリで非SSL通信を有効にしなくてはなりません。

そのためには、次の2つの設定をします。

(1)res/xml/network_security_config.xml を新規作成します。ここに、非SSLを許可したいURLを指定します。複数を指定できます。

(2)AndroidManifest.xml の <application>に、さきほど作ったnetwork_security_config.xmlを指定します。

参考URL