Получение "ошибки: закрыто" дважды на "adb reverse"

Я пытаюсь переправить порт через ADB, но он просто возвращает загадочную ошибку error: closed. Нормальная пересылка работает. Сессия сеанса:

$ adb forward tcp:59778 tcp:59778
$ adb forward --list
015d2109ce0c1a0f tcp:59778 tcp:59778
$ adb forward --remove-all
$ adb forward --list
$ adb reverse --list
error: closed
error: closed
$ adb reverse tcp:59778 tcp:59778
error: closed
error: closed

Я подключаюсь через USB к ненастроенному Nexus 7 2012 Android 4.4.4 из Windows 7 Pro x64 в Boot Camp.

Ответ 1

adb reverse был представлен в Android 5.0

Ответ 2

Так как adb reverse не поддерживается в версиях Android ниже 5.0, вам нужно использовать альтернативный метод, например, подключение через Wi-Fi. Если вы используете React Native, Facebook добавил официальную документацию для подключения к серверу разработки через Wi-Fi. Цитирование инструкций для MacOS, но они также имеют их для Linux и Windows:

Способ 2. Подключение через Wi-Fi

Вы также можете подключиться к серверу разработки через Wi-Fi. Сначала вам нужно будет установить приложение на устройство с помощью USB-кабеля, но как только это будет сделано, вы можете отлаживать беспроводное соединение, следуя этим инструкциям. Прежде чем продолжить, вам понадобится текущий IP-адрес вашей машины разработки.

Вы можете найти IP-адрес в Системные настройки → Сеть.

Убедитесь, что ваш ноутбук и телефон находятся в одной сети Wi-Fi. Откройте свое приложение React Native на своем устройстве. Вы увидите красный экран с ошибкой. Хорошо. Следующие шаги помогут исправить это. Откройте меню разработчика в приложении. Перейдите в раздел "Настройки Dev" → "Отладочный сервер сервера" для устройства. Введите IP-адрес устройства и порт локального сервера-разработчика (например, 10.0.1.1:8081). Вернитесь в меню "Разработчик" и выберите "Обновить JS".

Ответ 3

Внимательно выполните следующие действия.

Примечание. Все команды должны выполняться только внутри проекта.

  • Сначала выполните эту команду:

    npm react-native start
    
  • Откройте другое окно в том же проекте и запустите:

    curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"
    
  • Это создаст index.android.bundle в папке с ресурсами

  • Run:

    npm react-native run-android
    

Теперь вы можете получить apk в папке сборки, которая будет работать нормально.

Ответ 4

adb reverse требуется Android 5.0+. Для устройств, предшествующих этому, вам необходимо использовать обходной путь, подобный этому.

Если на вашем Android-устройстве установлен загрузочный бокс (большинство изображений Genymotion), вы можете эмулировать adb reverse с помощью этого заклинания:

adb shell busybox nc -ll -p {guest port} -e busybox nc {host IP} {host port}

В этом случае "гость" - это ОС Android, работающий в эмуляторе, а "хост" - это компьютер, на котором запущен эмулятор.

Ответ 5

причина обращения adb не работает на android до 5, вы можете использовать adb вперед с услугой, которая прослушивает android и туннелирует другие соединения через это входящее соединение. Я делаю это в основном с ssh, но вам нужен сервер ssh на android. вы можете подключиться с помощью ssh -R incommingreverseportonandroid: hostyouwanttoforwardto: portyouwanttoforwardto sshuseronandroid @localhost -p portyouhaveusedforadbforwaqrdtoaccessandroidssshserver

но я не знаю, как включить ssh-сервер в android, и, возможно, есть лучший способ, потому что ssh использует шифрование, которое не требуется для usb и использует процессор.

Я использую этот способ с моим сервером для совместного использования службы, когда меня задерживает nat...

надеюсь, что кто-то найдет способ довести этот теоретический путь до практической возможности

Ответ 6

Просто используйте 10.0.2.2 вместо localhost/127.0.0.1 для вашего имени хоста. Он будет напрямую пытаться подключиться к порту на хост-машине (то же самое, что и наоборот).