"Захват JS Bundle" Чудовищно медленно

Я уже некоторое время пытаюсь создать базовые приложения для Android с Android-адаптерами. Даже при развертывании самого базового приложения "Добро пожаловать в React Native" у меня очень долгое время ожидания, пока мой эмулятор печатает: "Получение JS Bundles". Эти времена проходят через 4 минуты.

введите описание изображения здесь

Я пробовал различные эмуляторы, включил HAXM, включил gradle, попробовал Intel_x64, Intel_x86, API Google для x64/x86 и все еще замедлял.

Любые предложения о том, что еще я могу попробовать?

Ответ 1

Я решил это НЕ используя adb для изменения моего TCP-порта 8081.

ОБНОВЛЕНИЕ 2: Я думал, что решил это, используя свое общедоступное имя IP/хоста, но оказывается, что react-native run-android создает adb reverse каждый раз при его выполнении. См. UPDATE 1 внизу для соответствующих ссылок.

ОРИГИНАЛ:

Когда я изначально установил свою машину для React Native, я выполнил следующую команду, чтобы приложение React взаимодействовало с React Packager: adb reverse tcp:8081 tcp:8081. Я заметил, что каждый раз, когда я запускал react-native run-android, мой эмулятор оставался приклеенным к "Fetching JS Bundle в течение длительного времени".

Чтобы устранить проблему с эмулятором в Windows:

  • Доступ к меню разработчика (в приложении, в эмуляторе), путем имитации встряхивания устройства. Откройте Additional Tools -> Accelerometer и нажмите "Воспроизвести" в нижней части окна под Recorded data: shake.

  • Нажмите Dev Settings (последний пункт меню).

  • Нажмите Debug server host & port for device и установите значение для public IP/Name:Port моего ПК в сети. (например, devpc.mynet.local:8081 или 192.168.1.99:8081).

  • Закройте приложение для реагирования.

  • Запустите adb reverse --remove-all, чтобы отменить мою предыдущую команду adb reverse tcp:8081....

  • Перезагрузите все, начиная с моего компьютера, запустив react-native run-android. Обратите внимание, что на этот раз шаг Fetching JS Bundle выполняется почти сразу.

Я только что нашел это решение для своей собственной среды. Я не пробовал его на каких-либо реальных устройствах. Кроме того, мне интересно, есть ли способ указать это из кода, чтобы он работал правильно в первый раз (вместо того, чтобы указывать публичный IP/имя моего компьютера, запустив приложение на устройстве и установив его в настройках Dev есть...)

Официальная документация:

ОБНОВЛЕНИЕ 1: Ниже приведены некоторые сведения о настройке предпочтений устройства debug_http_host.

Ответ 2

Прошло несколько дней, пытаясь увеличить скорость этого эмулятора и, наконец, все работало очень быстро и плавно.

Вам нужно иметь последнюю версию node. Если он устарел, он будет чудовищно медленным.

Теперь, если вам придётся закрыть сервер node и повторно запустить "реагировать на собственный запуск Android" после каждого небольшого изменения, которое вы делаете, ваш "наблюдатель файлов" никогда не будет установлен. Чтобы запустить загрузчик файлов, вы должны: (1) отредактировать файл yourAwesomeApp\node_modules\react-native\packager\react-packager\src\node -haste\FileWatcher\index.js(2) и измените MAX_WAIT_TIME на большее значение (например, 600000). node будет ждать, пока файловый менеджер запустит это время, поэтому, если значение будет слишком низким, node просто пропустит его и продолжит выборку. Когда происходит просмотр файла, вы можете просто дважды нажать R, чтобы перезагрузить небольшие изменения в код, который вы делаете.

Теперь вам нужно будет увидеть все ваши console.log(). Чтобы сделать это в Genymotion (эмулятор, который я рекомендую, даже бесплатное), нажмите ctrl M с вашим приложением и нажмите "Отладка JS удаленно". Это откроет вкладку в вашем веб-браузере (http://localhost:8081/debugger-ui). Осмотрите эту страницу, чтобы открыть консоль!