java - How to allow all Network connection types HTTP and HTTPS in Android (9) Pie?

ID : 20228

viewed : 18

Tags : javaandroidkotlinandroid-9.0-pieandroid-network-security-configjava

Top 5 Answer for java - How to allow all Network connection types HTTP and HTTPS in Android (9) Pie?

vote vote

96

The easy way to implement this is to use this attribute to your AndroidManifest.xml where you allow all http for all requests:

<application android:usesCleartextTraffic="true"> </application> 

But in case you want some more configurations for different links for instance, allowing http for some domains but not other domains you must provide res/xml/networkSecurityConfig.xml file.

To do this in Android 9 Pie you will have to set a networkSecurityConfig in your Manifest application tag like this:

<?xml version="1.0" encoding="utf-8"?> <manifest ... >     <application android:networkSecurityConfig="@xml/network_security_config">         </application> </manifest> 

Then in your xml folder you now have to create a file named network_security_config just like the way you have named it in the Manifest and from there the content of your file should be like this to enable all requests without encryptions:

<?xml version="1.0" encoding="utf-8"?> <network-security-config>     <base-config cleartextTrafficPermitted="true">         <trust-anchors>             <certificates src="system" />         </trust-anchors>     </base-config> </network-security-config> 

From there you are good to go. Now your app will make requests for all types of connections. For additional information on this topic read here.

vote vote

83

The FULLY WORKING SOLUTION for both Android or React-native users facing this issue just add this android:usesCleartextTraffic="true" in AndroidManifest.xml file like this:

android:usesCleartextTraffic="true" tools:ignore="GoogleAppIndexingWarning"> <uses-library     android:name="org.apache.http.legacy"     android:required="false" /> 

in between <application>.. </application> tag like this:

<application       android:name=".MainApplication"       android:label="@string/app_name"       android:icon="@mipmap/ic_launcher"       android:allowBackup="false"       android:theme="@style/AppTheme"         android:usesCleartextTraffic="true"         tools:ignore="GoogleAppIndexingWarning">         <uses-library             android:name="org.apache.http.legacy"             android:required="false" />       <activity         android:name=".MainActivity"         android:label="@string/app_name"/>  </application> 
vote vote

80

A simple way is set android:usesCleartextTraffic="true" on you AndroidManifest.xml

android:usesCleartextTraffic="true" 

Your AndroidManifest.xml look like

<?xml version="1.0" encoding="utf-8"?> <manifest package="com.dww.drmanar">    <application        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:usesCleartextTraffic="true"        android:theme="@style/AppTheme"        tools:targetApi="m">        <activity             android:name=".activity.SplashActivity"             android:theme="@style/FullscreenTheme">             <intent-filter>                 <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>        </activity>     </application> </manifest> 

I hope this will help you.

vote vote

69

Easy Way

Add usesCleartextTraffic to AndroidManifest.xml

<application ... android:usesCleartextTraffic="true" ...> 

Indicates whether the app intends to use cleartext network traffic, such as cleartext HTTP. The default value for apps that target API level 27 or lower is "true". Apps that target API level 28 or higher default to "false".

vote vote

51

For React Native applications while running in debug add the xml block mentioned by @Xenolion to react_native_config.xml located in <project>/android/app/src/debug/res/xml

Similar to the following snippet:

<?xml version="1.0" encoding="utf-8"?> <network-security-config>     <domain-config cleartextTrafficPermitted="true">         <domain includeSubdomains="false">localhost</domain>         <domain includeSubdomains="false">10.0.2.2</domain>         <domain includeSubdomains="false">10.0.3.2</domain>     </domain-config>     <base-config cleartextTrafficPermitted="true">         <trust-anchors>             <certificates src="system" />         </trust-anchors>     </base-config> </network-security-config> 

Top 3 video Explaining java - How to allow all Network connection types HTTP and HTTPS in Android (9) Pie?

Related QUESTION?