如何解决 Android P DownloadManager 因“不允许到 127.0.0.1 的明文 HTTP 流量”而停止?

Posted

技术标签:

【中文标题】如何解决 Android P DownloadManager 因“不允许到 127.0.0.1 的明文 HTTP 流量”而停止?【英文标题】:How to solve Android P DownloadManager stopping with "Cleartext HTTP traffic to 127.0.0.1 not permitted"? 【发布时间】:2019-01-17 02:44:15 【问题描述】:

我已经定义了一个自定义网络安全配置,并按照建议将其包含在我的清单中 here

res/xml/network_security_config.xml:

  <?xml version="1.0" encoding="utf-8"?>
  <network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">127.0.0.1</domain>
    <domain includeSubdomains="true">localhost</domain>
  </domain-config>
  </network-security-config>

这是在我的 Android.manifest 中:

    <application android:icon="@drawable/icon" 
             android:allowBackup="false"
             android:usesCleartextTraffic="true"
             android:networkSecurityConfig="@xml/network_security_config"
             android:label="@string/app_name"
             android:theme="@style/AppTheme"
             android:persistent="true" >

即使在尝试通过 HTTP 与 127.0.0.1 通信时进行了这些更改,我在 logcat 中也看到了这一点:

08-09 10:50:34.395 30791  3607 D NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
08-09 10:50:34.397 30791  3607 D NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
08-09 10:50:34.401 30791  3607 W DownloadManager: [647] Stop requested with status HTTP_DATA_ERROR: Cleartext HTTP traffic to 127.0.0.1 not permitted
08-09 10:50:34.402 30791  3607 D DownloadManager: [647] Finished with status WAITING_TO_RETRY

编辑:“修复”此问题后更新(2018 年 8 月 21 日),似乎在安装应用几个小时后,DownloadManager 神秘地停止接受明文 HTTP。

我无法解释发生了什么。如果我重新启动设备一段时间后一切正常,DownloadManager 会再次拒绝明文。我将其作为一个 Android P 错误写下来,希望得到解决。

编辑 2:更新(2019 年 1 月 17 日)我的 pixel2 现在正在运行带有 2019 年 1 月 5 日补丁的 android 9,我不再看到这个问题(到目前为止)。我猜这个问题在 8 月份的某个补丁中得到了解决。

【问题讨论】:

中添加 ... 用 关闭它 @user3344236 用 base-config 替换 domain-config 解决了它!提交您的回复作为答案,我会将其标记为已接受。 Spartygw,在回应“编辑:更新(2018 年 8 月 21 日)”时,我看到的和你一样。它工作,然后在几个小时后停止工作。为了暂时解决这个问题,我可以强制退出下载管理器应用程序,重新启动我的应用程序并再次尝试下载,它会起作用。我同意你的看法。它看起来确实像是下载管理器中 Android P 代码中的一个错误。 @spartygw 我已就您的更新(2018 年 8 月 21 日)向 Google 提交了问题。 issuetracker.google.com/issues/114143692 @LeonLu 太棒了!我什至不知道如何将此作为一个问题提出,所以我很感谢你这样做。 【参考方案1】:

创建一个 XML res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

在 AndroidManifest.xml 内的标记应用程序中引用此文件。喜欢:

android:networkSecurityConfig="@xml/network_security_config"

【讨论】:

你确定这是对的吗?它不应该是结束标签还是 />? 你已经知道结构是 XML 并且结束标签被标准化为 感谢结束标签的课程!现在从 ;) 中删除尾随 / 不需要,因为它不是节点 John Smith :)) 也使用通常的 html 关闭。请再次阅读链接。 经过这么多办法,明文通信问题通过上面的代码解决了。非常感谢。@user3344236【参考方案2】:

打开清单

添加 android:usesCleartextTraffic="true"

【讨论】:

【参考方案3】:

将 BASE_URL 协议从 http://... 替换为 https://

【讨论】:

请解释为什么这个替换可以回答这个问题

以上是关于如何解决 Android P DownloadManager 因“不允许到 127.0.0.1 的明文 HTTP 流量”而停止?的主要内容,如果未能解决你的问题,请参考以下文章

Android 如何有效的解决内存泄漏的问题

如何解决“违反使用 Android 广告 ID 政策和开发者分发协议第 4.8 节”的问题

遇到难题求高手帮忙解决--Android P开始监听不到关机广播

解决Android studio 中的 Android Device Monitor 中 File Explorer 无法打开data目录的方法(转载 http://www.jianshu.com/p

Google Android SDK 更新时 出现这个提示 是啥意思 怎么解决呀?

Android中指定关闭某个Activity