Recently when I started work on a new app for my company I noticed that all of my requests were being rejected before even reaching the server. This was a problem I was facing only on the emulator and not on the Nexus 5 I had for physical testing. I searched on the Internet a bit and found out that Android Pie has disabled cleartext network traffic by default.
I found 2 solutions for this. You can either enable cleartext traffic from your app for specific domains or you can set it for all the domains.
Add this attribute to the
<application> tag in your
This will enable app-wide cleartext traffic for any and all domains to which your app makes a request.
This is discouraged as you don’t specifically allow only the domains that require cleartext.
You first need to create a file named
network_security_config.xml file inside your
res/xml directory. The file contents should be as below
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">example-domain.com</domain> </domain-config> </network-security-config>
You need to replace
example-domain.com with the domain for which you want to enable http traffic. If you want to enable http for more than one domains then add relevant
<domain> tags for each.
Then you need to specify this file in your
AndroidManifest.xml as below:
... <application ... android:networkSecurityConfig="@xml/network_security_config"> ...
I faced this issue at work and now I am writing about it so others (and also me) can benefit from it in future. If you have more such ideas/examples or any other suggestions under the sky, contact me or tweet to me @varun_barad.