テクノモンキーのアプリ開発日記

テクノモンキーの開発ブログです。iOS、Android、Unity、Cocos2d-xなどアプリ開発関連のTipsやアプリ開発に役立つ情報を発信します。

Android 9.0で「No Network Security Config specified」エラーでHTTPリクエストが失敗する場合の対処法

Androidアプリ開発をしていた時に、下記のエラーが発生してHTTPリクエストが失敗してしまうことがあったので、今後の為にメモ。

D/NetworkSecurityConfig: No Network Security Config specified, using platform default

W/System.err: java.io.IOException: Cleartext HTTP traffic to "接続先ホスト" not permitted


Android 9.0未満ではHTTPリクエストが成功する


今回のエラーは、Android9.0の端末のみで発生しました。
Android8.1など、Android9.0未満では発生しなかったので、Android9.0以上で発生する問題だと思われます。

調べた感じだと、Android9.0以上でHTTPのサイトと通信を行う場合、接続先のドメインを許可する、ネットワークセキュリティ設定が必要になったようです。
(おそらく、HTTP通信の場合のみ必須で、HTTPS通信の場合はそのままでも通信は成功するっぽい)

developer.android.com

android-developers.googleblog.com



Android 9.0で「No Network Security Config specified」エラーでHTTPリクエストが失敗する場合の対処法

 

上記を参考に、ネットワークセキュリティ設定をしてみました。

やり方としてはまず、res以下にxmlフォルダを作成して、下記のような内容のnetwork_security_config.xmlを配置します。

Android 9.0で「No Network Security Config specified」エラーでHTTPリクエストが失敗する場合の対処法

//network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">HTTP通信を許可するドメイン</domain>
    </domain-config>
</network-security-config>

次に、AndroidManifest.xmlから先ほど作成したnetwork_security_config.xmlをリンクさせればOKです。

//AndroidManifest.xml
<application
        android:networkSecurityConfig="@xml/network_security_config">
    </application>


上記の作業でAndroid9.0の端末でもHTTP通信が成功するようになりました。