如何在Android(9)Pie中允许所有网络连接类型HTTP和HTTPS?

从现在的Android 9 Pie开始,没有加密的请求将永远不会起作用。默认情况下,系统将期望您在默认情况下使用TLS。您可以在此处阅读此功能因此,如果您仅通过HTTPS发出请求,那么您是安全的。但是,通过不同站点发出请求的应用程序(例如,类似浏览器的应用程序)呢?

如何在 Android 9 Pie 中启用对所有类型的连接 HTTP 和 HTTPS 的请求?


答案 1

实现此目的的简单方法是将此属性用于允许所有请求的所有属性:AndroidManifest.xmlhttp

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

但是,如果您希望为不同的链接进行更多配置,例如,允许某些域但不允许其他域,则必须提供文件。httpres/xml/networkSecurityConfig.xml

要在Android 9 Pie中执行此操作,您必须在清单中设置一个如下所示的清单标签:networkSecurityConfigapplication

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




    </application>
</manifest>

然后,在您的文件夹中,您现在必须创建一个文件,就像您在清单中命名它的方式一样,从那里开始,文件的内容应该如下所示,以启用所有请求而无需加密:xmlnetwork_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>

从那里你很好。现在,你的应用将对所有类型的连接发出请求。有关此主题的其他信息,请阅读此处


答案 2

对于面临此问题的AndroidReact原生用户来说,完全有效的解决方案只需将其添加到AndroidManifest.xml文件中,如下所示:android:usesCleartextTraffic="true"

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>

推荐