【问题标题】:Failed to open QEMU pipe 'qemud:network': Invalid argument无法打开 QEMU 管道 'qemud:network':参数无效
【发布时间】:2019-05-14 23:03:52
【问题描述】:

我正在尝试同时将大量图像上传到在线服务器,但我无法收到此错误 EPIPE(broken pipe)

12-13 19:00:25.389 1776-1776/? E/netmgr:打开 QEMU 管道失败 'qemud:network':参数无效 12-13 19:00:57.960 1706-1751/? E/storaged:getDiskStats 失败,结果为 NOT_SUPPORTED,大小为 0 12-13 19:01:05.180 2522-22392/com.google.android.gms.persistent E/WakeLock:GCM_HB_ALARM 释放没有匹配的获取! 12-13 19:01:05.601 2522-22605/com.google.android.gms.persistent E/NetworkScheduler:指定的组件无效。 12-13 19:01:16.094 1933-2653/system_process E/memtrack:无法加载 memtrack 模块

【问题讨论】:

  • 你解决过这个问题吗?

标签: php android file retrofit


【解决方案1】:

在 Android 模拟器/设备版本 >= 6.0 上可以看到此错误。 当您的应用尝试向不安全的远程 API (http) 发送/接收请求/响应时,就会发生这种情况。这就是为什么您应该坚持通过安全通道 (https) 与远程 API 进行通信的原因。但是您可以通过在您的 android 清单文件的 application 开始标记内将 usesCleartextTraffic 属性设置为“true”来解决此问题。

<application
    android:usesCleartextTraffic="true" >

上述技巧解决了这个问题,但它往往会对数据完整性造成威胁。因此,您可以通过设置和利用网络安全配置文件来使其变得更好。这样就可以做到了;

第 1 步: 转到 res->New->android 资源目录。创建你的 xml 资源目录

第 2 步:在新创建的 xml 资源目录中创建一个新的资源文件(名称为:'network_security_config') 通过浏览 (xml->New->XML 资源文件)。

第 3 步:将以下代码粘贴到新创建的“network_security_config.xml”文件中

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

第 4 步:转到您的 AndroidManifest.xml 文件并在 应用程序中添加代码 android:networkSecurityConfig="@xml/network_security_config"您的 android 清单文件的开始标记。

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:networkSecurityConfig="@xml/network_security_config" >

【讨论】:

  • 我尝试了您建议的方法,但没有帮助。我仍然收到相同的错误消息。
【解决方案2】:

这个问题发生在我的 Android 9.0 中,我通过在应用程序标签中添加 android:usesCleartextTraffic="true" 来修复它。

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

您可以在这里找到更多信息:https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6

【讨论】:

  • 有没有办法通过命令行做到这一点?我正在使用 AOSP 构建的模拟器,但没有看到此选项。
  • 为我工作。它确实给了我关于最低 API 级别的错误,但我忽略了它并且它工作正常。
  • @Emre Alparslan:我尝试了您建议的方法,但仍然遇到相同的错误(请参阅此处:stackoverflow.com/questions/69953789/…)。知道问题可能是什么吗?
  • 已经设置好了。没有区别。
  • 我尝试了您建议的方法,但没有帮助。我仍然收到相同的错误消息。
【解决方案3】:

我重新创建了一个 AVD,并在新的 AVD 中运行程序,问题就解决了。 我只遇到过一次,对我有用,不知道能不能帮到你,如果能帮到你就太好了

【讨论】:

    【解决方案4】:

    打开 cmd 并 cd 到 C:\Users\Username_here\AppData\Local\Android\Sdk\emulator 运行这个命令 emulator -avd device_name -wipe-data 我的设备名称是 Nexus_5X_API_29_x86 所以它会是 emulator -avd Nexus_5X_API_29_x86 -wipe-data 等到你看到类似这样的东西

    【讨论】:

    • 虽然这些命令可能会为问题提供解决方案,但最好添加关于它为什么/如何工作的上下文。这可以帮助未来的用户参考并最终应用这些知识。解释代码时,您也可能会得到用户的积极反馈/赞成。
    【解决方案5】:

    转到Tools -&gt; Android -&gt; SDK Manager,然后选择SDK Tools 选项卡,然后确保选中Android Emulator 复选框。

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 1970-01-01
      • 2020-02-22
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      • 2016-06-23
      • 2020-04-06
      相关资源
      最近更新 更多