如何在 Android (9) Pie 中允许所有网络连接类型 HTTP 和 HTTPS?
How to allow all Network connection types HTTP and HTTPS in Android (9) Pie?
来自Android 9 Pie 现在,没有加密的请求将永远无法工作。默认情况下,系统会期望您默认使用 TLS。You can read this feature here 因此,如果您仅通过 HTTPS 发出请求,那么您是安全的。但是通过不同站点发出请求的应用程序呢,例如,类似浏览器的应用程序。
如何在 Android 9 Pie 中启用对所有类型的 HTTP 和 HTTPS 连接的请求?
实现这一点的简单方法是将此属性用于您的 AndroidManifest.xml
,您允许所有 http
用于所有请求:
<application android:usesCleartextTraffic="true">
</application>
但是,如果您想要一些 更多配置 用于不同的链接,例如,允许 http
用于某些域而不是其他域,您必须提供 res/xml/networkSecurityConfig.xml
文件。
要在 Android 9 Pie 中执行此操作,您必须在清单 application
标签中设置一个 networkSecurityConfig
,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config">
</application>
</manifest>
然后在你的 xml
文件夹中,你现在必须创建一个名为 network_security_config
的文件,就像你在清单中命名它的方式一样,从那里你的文件内容应该是这样的启用所有不加密的请求:
<?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>
从那里你很高兴。现在您的应用程序将请求所有类型的连接。有关此主题的其他信息 read here.
对于 React Native
应用程序,而 运行 处于调试状态,将 @Xenolion 提到的 xml block
添加到位于 <project>/android/app/src/debug/res/xml
中的 react_native_config.xml
类似于以下代码段:
<?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>
完全有效的解决方案 Android
或 React-native
遇到这个问题的用户只需添加这个
android:usesCleartextTraffic="true"
在 AndroidManifest.xml 文件中像这样:
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
在 <application>
之间 </application>
标签如下:
<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>
您可以检查您是否通过 HTTP 发送明文
修复:https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
或
在 Apache HTTP 客户端弃用的情况下(来自 Google ):
在 Android 6.0 中,我们删除了对 Apache HTTP 客户端的支持。从 Android 9 开始,该库已从引导类路径中删除,默认情况下对应用程序不可用。
要继续使用 Apache HTTP 客户端,面向 Android 9 及更高版本的应用程序可以将以下内容添加到其 AndroidManifest.xml:
来源
https://developer.android.com/about/versions/pie/android-9.0-changes-28
只需在 AndroidManifest.xml
文件的应用程序标签中设置 usesCleartextTraffic
标志。
无需为 Android.
创建配置文件
<application
android:usesCleartextTraffic="true"
.
.
.>
一个简单的方法设置android:usesCleartextTraffic="true"
给你AndroidManifest.xml
android:usesCleartextTraffic="true"
你的 AndroidManifest.xml
看起来像
<?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>
希望对您有所帮助。
简单方法
将usesCleartextTraffic
添加到AndroidManifest.xml
<application
...
android:usesCleartextTraffic="true"
...>
表明应用是否打算使用明文网络流量,例如明文 HTTP。针对 API 级别 27 或更低级别的应用的默认值为 "true"。面向 API 级别 28 或更高级别的应用默认为 "false"。
我遇到了同样的问题,我注意到我的安全配置有不同的标签,就像@Xenolion 回答说的那样
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config>
</network-security-config>
所以我为 "base-config" 更改了 TAGS "domain-config" 并像这样工作:
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</base-config>
</network-security-config>
这对我有用,
将此 xml 文件添加到:
andriod/app/src/main/res/xml/network_security_config.xml
network_security_config.xml
xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">your_domain1</domain>
</domain-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">your_domain2</domain>
</domain-config>
</network-security-config>
然后将此代码添加到 AndroidMenifest.xml
<application
...
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
...
>
<!-- for http support-->
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
...
</application>
来自Android 9 Pie 现在,没有加密的请求将永远无法工作。默认情况下,系统会期望您默认使用 TLS。You can read this feature here 因此,如果您仅通过 HTTPS 发出请求,那么您是安全的。但是通过不同站点发出请求的应用程序呢,例如,类似浏览器的应用程序。
如何在 Android 9 Pie 中启用对所有类型的 HTTP 和 HTTPS 连接的请求?
实现这一点的简单方法是将此属性用于您的 AndroidManifest.xml
,您允许所有 http
用于所有请求:
<application android:usesCleartextTraffic="true">
</application>
但是,如果您想要一些 更多配置 用于不同的链接,例如,允许 http
用于某些域而不是其他域,您必须提供 res/xml/networkSecurityConfig.xml
文件。
要在 Android 9 Pie 中执行此操作,您必须在清单 application
标签中设置一个 networkSecurityConfig
,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config">
</application>
</manifest>
然后在你的 xml
文件夹中,你现在必须创建一个名为 network_security_config
的文件,就像你在清单中命名它的方式一样,从那里你的文件内容应该是这样的启用所有不加密的请求:
<?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>
从那里你很高兴。现在您的应用程序将请求所有类型的连接。有关此主题的其他信息 read here.
对于 React Native
应用程序,而 运行 处于调试状态,将 @Xenolion 提到的 xml block
添加到位于 <project>/android/app/src/debug/res/xml
react_native_config.xml
类似于以下代码段:
<?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>
完全有效的解决方案 Android
或 React-native
遇到这个问题的用户只需添加这个
android:usesCleartextTraffic="true"
在 AndroidManifest.xml 文件中像这样:
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
在 <application>
之间 </application>
标签如下:
<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>
您可以检查您是否通过 HTTP 发送明文
修复:https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
或
在 Apache HTTP 客户端弃用的情况下(来自 Google ):
在 Android 6.0 中,我们删除了对 Apache HTTP 客户端的支持。从 Android 9 开始,该库已从引导类路径中删除,默认情况下对应用程序不可用。
要继续使用 Apache HTTP 客户端,面向 Android 9 及更高版本的应用程序可以将以下内容添加到其 AndroidManifest.xml:
来源 https://developer.android.com/about/versions/pie/android-9.0-changes-28
只需在 AndroidManifest.xml
文件的应用程序标签中设置 usesCleartextTraffic
标志。
无需为 Android.
<application
android:usesCleartextTraffic="true"
.
.
.>
一个简单的方法设置android:usesCleartextTraffic="true"
给你AndroidManifest.xml
android:usesCleartextTraffic="true"
你的 AndroidManifest.xml
看起来像
<?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>
希望对您有所帮助。
简单方法
将usesCleartextTraffic
添加到AndroidManifest.xml
<application
...
android:usesCleartextTraffic="true"
...>
表明应用是否打算使用明文网络流量,例如明文 HTTP。针对 API 级别 27 或更低级别的应用的默认值为 "true"。面向 API 级别 28 或更高级别的应用默认为 "false"。
我遇到了同样的问题,我注意到我的安全配置有不同的标签,就像@Xenolion 回答说的那样
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config>
</network-security-config>
所以我为 "base-config" 更改了 TAGS "domain-config" 并像这样工作:
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</base-config>
</network-security-config>
这对我有用,
将此 xml 文件添加到: andriod/app/src/main/res/xml/network_security_config.xml
network_security_config.xml
xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">your_domain1</domain>
</domain-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">your_domain2</domain>
</domain-config>
</network-security-config>
然后将此代码添加到 AndroidMenifest.xml
<application
...
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
...
>
<!-- for http support-->
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
...
</application>