[Android] Cleartext HTTP traffic to X.X.X not permitted

[Android] Cleartext HTTP traffic to X.X.X not permitted

Goal

  • Solve ‘Cleartext HTTP traffic to X.X.X not permitted’ error


Problem

  • I replaced the target SDK 27 with 28(Pie 9.0)
  • After that, when trying to communicate with server by HTTP protocol, this error occured

screenshot001


Solution

Cause

  • From API level 28(Pie 9.0) it has been default to prevent unencrypted HTTP protocl

screenshot002

AndroidDeveloper


1. Add a Network Security Configuration file

  • The Network Security Configuration feature uses an XML file where you specify the settings for your app

1.1 Add xml file in res/xml

  • Create network_security_config.xml file in src/res/xml directory

screenshot003

screenshot004


1.2. Add options

  • Recommend to allow only specific domains
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!-- Allow specific domains -->
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">iot.qubics.kr</domain>
    </domain-config>

    <!-- Allow all domains -->
    <!--
    <base-config cleartextTrafficPermitted="true" />
    -->

</network-security-config>


1.3. Edit AndroidManifest.xml

  • Add android:networkSecurityConfig=”@xml/network_security_config” option
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="io.dorbae.android">
    <application
       android:networkSecurityConfig="@xml/network_security_config"
...>
        ....
    </application>
</manifest>

screenshot005


2. Edit only AndroidManiofest.xml

  • Add android:useCleartextTraffic=”true” option

div style=”background: #eeeedd; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;”><table><tr><td><pre style="margin: 0; line-height: 125%">1 2 3 4 5 6 7 8 9</pre></td><td><pre style="margin: 0; line-height: 125%"><?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.dorbae.android"> <application android:usesCleartextTraffic="true" > …. </application> </manifest> </pre></td></tr></table></div>

screenshot006



References

댓글남기기

-->