Ответ 1
Если кто-то использует оба eclipse и android studio вместе, то эта ошибка будет выбрана eclipse. Таким образом, даже если вы выберете устройство через DDMS, он собирается выбросить эту ошибку.
Мой AVD имеет API 15, я не знаю, почему, но следующее сообщение продолжает появляться всякий раз, когда я запускаю приложение на эмуляторе. Кажется, что это не вызвало никаких проблем, кроме сообщения об ошибке в консоли.
[2012-06-17 00:03:26 - ddmlib] Broken pipe
java.io.IOException: Broken pipe
at sun.nio.ch.FileDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:122)
at sun.nio.ch.IOUtil.write(IOUtil.java:93)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:352)
at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
at com.android.ddmlib.Client.sendAndConsume(Client.java:575)
at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:348)
at com.android.ddmlib.Client.requestAllocationStatus(Client.java:421)
at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:837)
at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:805)
at com.android.ddmlib.DeviceMonitor.processIncomingJdwpData(DeviceMonitor.java:765)
at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:652)
at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:44)
at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:580)
В чем может быть причина?
Если кто-то использует оба eclipse и android studio вместе, то эта ошибка будет выбрана eclipse. Таким образом, даже если вы выберете устройство через DDMS, он собирается выбросить эту ошибку.
Старый вопрос, но по-прежнему актуальный, и я не видел другого ответа с этой информацией:
Для меня это произошло, когда другой Eclipse работал одновременно, причем DDMS конкурирует за тот же сокет, что и eclipse, пытающийся подключиться к устройству Android.
Решение заключалось в закрытии другого Eclipse. Надеюсь, это поможет кому-то.
Обновление. Вероятно, лучшим решением является отредактировать порт DDMS другого затмения для того, что вы не используете. Так что это из гонки.
Это случилось со мной, когда у меня были оба monitor
и Eclipse ADT open. Попробуйте закрыть все связанные с Android вещи, а затем выполните adb kill-server && sleep 5 && adb devices
, а затем запустите инструмент (Eclipse/Ant/AS).
"Сломанная труба" означает, что вы написали данные в соединение, которое уже было закрыто одноранговым узлом. Решение: не надо. Это, по сути, ошибка протокола приложения.
Я предполагаю, что клиент (Eclipse) обменивается данными с сервером (вашим эмулятором) по протоколу Pipe (этот протокол хорошо знает для связи 2 процесса на одном компьютере).
Иногда канал связи может быть поврежден. (Возможны еще 100 причин)
Чтобы решить эту проблему: перезапустите эмулятор (AVD). Возможно, вам придется подождать минутку (~ 1 мин.), Поэтому Eclipse может восстановить канал трубы, и ваш Log Cat вернется. В противном случае перезапустите оба Eclipse и эмулятор, чтобы избавиться от этой ошибки.
Самая распространенная причина, по которой я столкнулся с "сломанным трубой", состоит в том, что одна машина (пары, подключаемой через сокет) закрыла свой конец сокета до того, как связь была завершена. Около половины из них были связаны с тем, что программа, сообщающая об этом сокете, завершилась.
Если программа, отправляющая байты, отправляет их и немедленно отключает сокет или завершает себя, возможно, что сокет перестает функционировать до того, как байты будут переданы и прочитаны.
Попробуйте помещать паузы в любом месте, где вы закрываете сокет, и перед тем, как разрешить программе завершить работу, чтобы узнать, помогает ли это.
FYI: "pipe" и "socket" - это термины, которые иногда используются как взаимозаменяемые.
Я заметил это часто (каждые 5 минут или около того). Частота, казалось, увеличивалась, если у меня было как физическое устройство, так и эмулятор.
Остановка эмулятора и использование только физического устройства для отладки перестали происходить так часто: теперь я вижу его только один или два раза в день.
Чтобы решить эту проблему, вам не нужно закрывать эмулятор или перезагружать устройство - отключение и отключение режима USB-отладки должно заставлять его снова отображаться под adb.
Я долгое время боролся с этой проблемой. Всякий раз, когда я хотел отлаживать мобильное приложение Android с помощью инструмента отладки Chrome, я отключился каждые 5 минут.
Я выяснил, что причиной этого является другой процесс, связанный с подключением к мобильному телефону, который работает в ОС, что нарушает связь между мобильным телефоном и ОС.
Я использую Macbook Pro, и я запускал IntelliJ IDEA debugger + Android File Transfer (не знал, что это работает) и инструмент отладчика Chrome. Когда я закрыл процесс передачи файлов Android с помощью инструмента "Монитор активности", все работало хорошо, больше не было разъединения между мобильным телефоном и ОС. Мое предложение - всегда проверять, если вы работаете с другим процессом Android.
Я использовал Android Studio и DDMS. Закрытие DDMS устранило проблему для меня.
Перезапуск Android Studio не повлиял.
В случае, если кто-либо еще не нашел никакого решения для этого. В затмениях Neon это произошло, когда у меня было два DDMS-баночки в каталоге плагинов. У меня были andmore.ddms.jar и com.android_ddms.jar. Удаление одного разрешает ошибку, я думаю, они оба конкурируют за подключение к одному и тому же порту.
перезагрузка устройства Android исправила мою проблему
Исключение "Сломанная труба" возникает, когда соединение сокета закрывается клиентом с другой стороны. Большую часть времени это не о чем беспокоиться.
В моем случае я удаляю .android в своем домашнем каталоге. Это хорошо.