从现在的Android 9 Pie开始,没有加密的请求将永远无法使用。默认情况下,系统会期望您默认使用TLS。您可以在此处阅读此功能,因此,如果仅通过HTTPS发出请求,则将是安全的。但是,通过不同站点发出请求的应用程序(例如类似浏览器的应用程序)呢?
如何在Android 9 Pie中启用对所有类型的连接HTTP和HTTPS的请求?
从现在的Android 9 Pie开始,没有加密的请求将永远无法使用。默认情况下,系统会期望您默认使用TLS。您可以在此处阅读此功能,因此,如果仅通过HTTPS发出请求,则将是安全的。但是,通过不同站点发出请求的应用程序(例如类似浏览器的应用程序)呢?
如何在Android 9 Pie中启用对所有类型的连接HTTP和HTTPS的请求?
Answers:
实现此目的的简单方法是AndroidManifest.xml
在允许http
所有请求全部使用的位置使用此属性:
<application android:usesCleartextTraffic="true">
</application>
但是,例如,如果您想为不同的链接进行更多配置,从而允许http
某些域但不允许其他域,则必须提供res/xml/networkSecurityConfig.xml
文件。
要在Android 9 Pie中执行此操作,您必须networkSecurityConfig
在Manifest application
标签中设置如下:
<?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>
从那里出发,您一切顺利。现在,您的应用将请求所有类型的连接。有关此主题的更多信息,请单击此处。
面向所有人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>
tools:ignore
错误,请一定要加xmlns:tools="http://schemas.android.com/tools"
你的里面application
。像这样<application xmlns:tools="http://schemas.android.com/tools" ...
NSAppTransportSecurity
到info.plist。stackoverflow.com/questions/38418998/...
一个简单的方法设置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
文件的应用程序标记中设置标志。无需为Android创建配置文件。
<application
android:usesCleartextTraffic="true"
.
.
.>
对于React Native
在调试中运行的应用程序,将xml block
@Xenolion提及的内容添加到react_native_config.xml
位于<project>/android/app/src/debug/res/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>
我遇到了同样的问题,并且我注意到我的安全配置具有不同的标记,例如@Xenolion回答说
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config>
</network-security-config>
所以我将标签“ domain-config”更改为“ base-config”并工作,如下所示:
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</base-config>
</network-security-config>
您可以检查是否通过HTTP Fix发送clearText:https
://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
或
对于Apache HTTP客户端弃用(来自Google):在Android 6.0中,我们删除了对Apache HTTP客户端的支持。从Android 9开始,该库已从bootclasspath中删除,并且默认情况下不适用于应用程序。要继续使用Apache HTTP客户端,面向Android 9及更高版本的应用可以将以下内容添加到其AndroidManifest.xml中:
来源 https://developer.android.com/about/versions/pie/android-9.0-changes-28