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を指定します。複数を指定できます。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">example.jp</domain>
<domain includeSubdomains="true">example.com</domain>
</domain-config>
</network-security-config>
Code language: HTML, XML (xml)
(2)AndroidManifest.xml の <application>に、さきほど作ったnetwork_security_config.xmlを指定します。
<application
...
android:networkSecurityConfig="@xml/network_security_config"
Code language: HTML, XML (xml)
参考URL