org.apache.http.legacy 在 API 28 上不起作用



首先,我使用org.apache.http函数有一段时间了,当我试图在API 28上启动我的应用程序时出错了。它在API 26和API 23上工作,但API 28突然出现问题。谷歌做了一些改变吗?

要在Android 9.0 Pie中完美运行org.apache.http.legacy,请创建一个xml文件res/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>
</network-security-config>

并在你的AndroidManifest.xml 中添加2个标签标签

android:networkSecurityConfig="@xml/network_security_config"android:name="org.apache.http.elegacy">

<?xml version="1.0" encoding="utf-8"?>
<manifest......>
<application android:networkSecurityConfig="@xml/network_security_config">
<activity..../> 
......
......
<uses-library
android:name="org.apache.http.legacy"
android:required="false"/>
</application>

此外,在应用程序构建渐变中添加useLibrary 'org.apache.http.legacy'

android {
compileSdkVersion 28
defaultConfig {
applicationId "your application id"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
useLibrary 'org.apache.http.legacy'
}

步骤1:
res/xml/network_security_config.xml中创建一个xml文件,并在其中复制以下代码

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">your.website.domain</domain> <!-- the domain you are using for api network call -->
</domain-config>
</network-security-config>

步骤2:
现在在您的Manifest.xml中,在<application>标记下添加android:networkSecurityConfig="@xml/network_security_config"。完成!

您只需要做两件事:

1-将你的AndroidManifest.xml放在<application>下的下一行

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

2-将正在调用的Url更改为HTTPS,而不是HTTP

在我这样做之后,错误消失了,我的应用程序又工作了。

Apache HTTP客户端弃用

使用Android 6.0,我们删除了对Apache HTTP客户端的支持。从Android 9开始,该库从bootclasspath,默认情况下应用程序不可用。

我也遇到了同样的问题。我使用HTTPS而不是HTTP解决了这个问题。显然,现在需要一个安全的连接。

最新更新