Ответ 1
adb reverse
был представлен в Android 5.0
Я пытаюсь переправить порт через 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.
adb reverse
был представлен в Android 5.0
Так как 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".
Внимательно выполните следующие действия.
Примечание. Все команды должны выполняться только внутри проекта.
Сначала выполните эту команду:
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 в папке сборки, которая будет работать нормально.
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, работающий в эмуляторе, а "хост" - это компьютер, на котором запущен эмулятор.
причина обращения adb не работает на android до 5, вы можете использовать adb вперед с услугой, которая прослушивает android и туннелирует другие соединения через это входящее соединение. Я делаю это в основном с ssh, но вам нужен сервер ssh на android. вы можете подключиться с помощью ssh -R incommingreverseportonandroid: hostyouwanttoforwardto: portyouwanttoforwardto sshuseronandroid @localhost -p portyouhaveusedforadbforwaqrdtoaccessandroidssshserver
но я не знаю, как включить ssh-сервер в android, и, возможно, есть лучший способ, потому что ssh использует шифрование, которое не требуется для usb и использует процессор.
Я использую этот способ с моим сервером для совместного использования службы, когда меня задерживает nat...
надеюсь, что кто-то найдет способ довести этот теоретический путь до практической возможности
Просто используйте 10.0.2.2 вместо localhost/127.0.0.1 для вашего имени хоста. Он будет напрямую пытаться подключиться к порту на хост-машине (то же самое, что и наоборот).