react-native run-android не запускает сборщик, поэтому я попробовал
react-native start показывает ошибку ниже.
┌──────────────────────────────────────────────────────────────────────────────┐
│ │
│ Running Metro Bundler on port 8081. │
│ │
│ Keep Metro running while developing on any JS projects. Feel free to │
│ close this tab and run your own Metro instance if you prefer. │
│ │
│ https://github.com/facebook/react-native │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
events.js:167
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE :::8081
at Server.setupListenHandle [as _listen2] (net.js:1286:14)
at listenInCluster (net.js:1334:12)
at Server.listen (net.js:1421:7)
at /Users/user/Documents/Prasanth/AwesomeProject/node_modules/metro/src/index.js:157:18
at new Promise (<anonymous>)
at Object.<anonymous> (/Users/user/Documents/Prasanth/AwesomeProject/node_modules/metro/src/index.js:156:12)
at Generator.next (<anonymous>)
at step (/Users/user/Documents/Prasanth/AwesomeProject/node_modules/metro/src/index.js:47:262)
at /Users/user/Documents/Prasanth/AwesomeProject/node_modules/metro/src/index.js:47:422
Emitted 'error' event at:
at Server.WebSocketServer._onServerError (/Users/user/Documents/Prasanth/AwesomeProject/node_modules/ws/lib/WebSocketServer.js:82:50)
at Server.emit (events.js:187:15)
at emitErrorNT (net.js:1313:8)
at process._tickCallback (internal/process/next_tick.js:63:19)
реагировать на родную информацию
React Native Environment Info:
System:
OS: macOS High Sierra 10.13.6
CPU: x64 Intel(R) Core(TM)2 Duo CPU E7600 @ 3.06GHz
Memory: 3.36 GB / 12.00 GB
Shell: 3.2.57 - /bin/bash
Binaries:
Node: 10.12.0 - /usr/local/bin/node
Yarn: 1.10.1 - /usr/local/bin/yarn
npm: 6.4.1 - /usr/local/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
SDKs:
iOS SDK:
Platforms: iOS 12.0, macOS 10.14, tvOS 12.0, watchOS 5.0
Android SDK:
Build Tools: 21.1.2, 23.0.1, 25.0.0, 26.0.0, 26.0.1, 26.0.2, 26.0.3, 27.0.3, 28.0.2, 28.0.3
API Levels: 21, 22, 23, 24, 25, 26, 27
IDEs:
Android Studio: 3.2 AI-181.5540.7.32.5056338
Xcode: 10.0/10A255 - /usr/bin/xcodebuild
npmPackages:
react: 16.5.0 => 16.5.0
react-native: 0.57.2 => 0.57.2
npmGlobalPackages:
react-native-cli: 2.0.1
react-native-git-upgrade: 0.2.7
package.json
{
"name": "AwesomeProject",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.5.0",
"react-native": "0.57.2"
},
"devDependencies": {
"babel-jest": "23.6.0",
"jest": "23.6.0",
"react-test-renderer": "16.5.0"
},
"jest": {
"preset": "react-native"
}
}
Я попытался очистить кеш, и обратный adb все еще сталкивается с этой проблемой
react-native run-android показывает ошибку ниже.
Конфигурация Android Home
export ANDROID_HOME=/<Path>/android-sdk-macosx
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/emulator
Как решить эту проблему.
Команда @makadev выше возвращает tcp4 0 0 localhost.51565 . LISTEN tcp46 0 0 .51133 *. makadev LISTEN tcp4 0 0 localhost.5037 . LISTEN tcp6 0 0 .49162 *. LISTEN tcp6 0 0 .rfb *. LISTEN tcp6 0 0 .rfb *.
tcp4 0 0 .rfb *. LISTEN tcp6 0 0 .rfb *. LISTEN tcp4 0 0 localhost.ipp . LISTEN tcp6 0 0 localhost.ipp . LISTEN tcp46 0 0 .sunproxyadmin *. LISTEN
.sunproxyadmin - это дескриптор службы для порта 8081, поэтому там что-то слушает. Проверьте свои терминалы, возможно, запущен другой экземпляр Metrobuilder (например, Xcode, на котором запущено приложение?). Чтобы остановить любой процесс, запущенный на этом порту, и если у вас есть lsof или brew для его установки, проверьте stackoverflow.com/a/47820483/3828957.
Это потому, что порт 8081 уже используется.
Пытаться
react-native start --port=8080
Это сработает.
не работает, он застрял при загрузке графика зависимостей. я уже пробовал это
Для проблемы с Unable to load script from assets вам необходимо выполнить следующие шаги:
1] Please check whether "assets" folder exists or not in 'android/app/src/main/'
a] If it exists then, you need to delete two files(i.e. index.android.bundle and index.android.bundle.meta)
b] If it doesn't exist, then create the assets directory in it.
2] Use below commands from your root project directory:
cd android
./gradlew clean
3] Go to the root directory and check:
a] If there is only one file(i.e. index.js), then run below command:
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
b] If there are two files(i.e index.android.js and index.ios.js), then below command:
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
4] Finally run below command:
react-native run-android
на основе вашего ответа невозможно отладить приложение
Я попробовал выполнить следующие действия, и моя проблема решена.
react-native start --port 8084 --reset-cachereact-native run-android --port 8084 во втором окне командной строки.Ctrl + M, iOSCommand + D.localhost:8084 и нажмите кнопку ОК.react-native run-android --port 8084Это сработало для меня для Android
Пожалуйста, укажите некоторые шаги для ios
Вы можете перейти в папку «Пользователи» и удалить каталог «.expo». Он может быть скрыт как системный каталог, поэтому просмотрите все, а затем удалите папку .expo.
Снова запустите npm start.
Точно такая же проблема, с которой я столкнулся. Я только что обновился до 0.59.1, и это не работает ... В качестве обходного пути я запускаю конструктор метро на отдельной вкладке, а затем запускаю реакцию на отдельной вкладке.
react-native start --reset-cache
в одном терминале и оставил его открытым
react-native run-android
в другом терминале
Из ошибки, насколько я понимаю, он должен сначала запустить команду пакета перед запуском JS Server
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
Наконец, вы можете проверить, нет ли какой-либо зависимости, выполнив следующую команду
./gradlew assembleRelease -x bundleReleaseJsAndAssets
тогда вы можете запустить Android и реагировать на собственный сервер
react-native run-android
react-native start --reset-cache
Удачи !
Добавление android: usesCleartextTraffic = "true" в тег приложения в AndroidManifest у меня работает
<application
...
android:usesCleartextTraffic = "true"
...
Та же проблема, с которой я столкнулся. Вышеупомянутые решения не сработали для меня. Проблема была от Версия NodeJS.
Установленной версией NodeJS была 12.11.1, в которой у меня возникли указанные выше проблемы. Затем я заменил на стабильную версию 10.16.3 LTS, и она работает.
Надеюсь, это решение поможет.
Замените код этим. Путь к файлу -
node_modules\metro-config\src\defaults\blacklist.js
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website/node_modules/.*/,
/heapCapture/bundle\.js/,
/.*/__tests__/.*/
];
Я нашел это решение на Github.
Не могу поверить, что это сработало для меня, но это так. РН 0,63,4
@Ajoy Karmakar У меня там нет файла blacklist.js, какая у вас версия метро?
Это сработало для меня
react-native start --port=8080
Я решил это, запустив "yarn start" на другом терминале перед запуском "react-native run-android"
У меня есть решение проблемы
тогда он будет работать
Я предлагаю вам удалить эту строку import com.facebook.react.BuildConfig в Android / MainApplication
Я просто решил, посмотрев YouTube ниже .. https://thewikihow.com/video_LPYez4cs5LY
Я резюмирую, как показано ниже
"android/app/src/main/assets/"
sharedBlacklist в node_modules/metro-config/src/defaults/blacklist.js, как показано нижеvar sharedBlacklist = [ /node_modules[/\\]react[/\\]dist[/\\].*/, /website/node_modules/.*/, /heapCapture/bundle\.js/, /.*/__tests__/.*/ ];
с участием :
var sharedBlacklist = [ /node_modules[/\\]react[/\\]dist[/\\].*/, /website/node_modules/.*/, /heapCapture/bundle\.js/, /.*/__tests__/.*/ ];
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
Что делать, если ваш пакет metro-config не содержит этого каталога или файла?
Это проблема Gradle.
обновить distributionURL в приложение / градиент / оболочка / gradle-wrapper.properties
из
distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip
к
distributionUrl=https\://services.gradle.org/distributions/gradle-6.6-all.zip
1.- Создать каталог:
android/app/src/main/assets
2.- редактировать файл проекта:
node_module\metro-config\src\defaults\blacklist.js
или РН 0,64:
node_module\metro-config\src\defaults\exclusionList.js
Заменять :
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website/node_modules/.*/,
/heapCapture/bundle\.js/,
/.*/__tests__/.*/
];
с участием :
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website/node_modules/.*/,
/heapCapture/bundle\.js/,
/.*/__tests__/.*/
];
или РН 0,64
var list = [/website/node_modules/.*/, /.*/__tests__/.*/];
с участием:
var list = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website/node_modules/.*/,
/heapCapture/bundle\.js/,
/.*/__tests__/.*/
];
3. - в папке project запустите это:
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
4.- реагировать-родной run-android
Эта работа для меня!
Обновление файлов в node_modules не является решением. Это может исправить это на вашем компьютере, но не исправит для всех. Каждый раз, когда вы переустанавливаете модули, вам нужно снова их исправлять.
Когда я запустил yarn android, metro bundler успешно работает в отдельном терминале, и приложение работает без проблем.
Но для yarn ios приложение создается и открывается в симуляторе, но metro-bundler не запускается, поэтому приложение не работает.
Что я обнаружил, так это то, что реагирует на нативное использование
packages/myapp/ios/myapp.xcodeproj/project.pbxproj:178 файл, чтобы организовать последовательность действий для сборки.
buildPhases = (
9BD325B29C2F37E3FB2D5CCB /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
422396959450562FD5166D49 /* [CP] Embed Pods Frameworks */,
3C714C11B606C47481E15B97 /* [CP] Copy Pods Resources */,
Вы можете видеть, что сборщик метро (FD10A7F022414F080027D42C /* Start Packager */,) должен запускаться вначале, чтобы приложение могло подключиться к нему как можно скорее.
В моем случае упаковщик не смог найти пакет метро, так как моя папка node_modules сменила местоположение. Поэтому мне нужно было сообщить ему новое местоположение.
Я покопался и нашел решение в packages/myapp/ios/myapp.xcodeproj/project.pbxproj:395
FD10344022414F080027D42C /* Start Packager */ = {
...
...
shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../../../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../../../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
вы могли заметить, что я использую /../../../node_modules, потому что у меня есть такая структура каталогов, как
.
└── node_modules
└── packages
├── common
├── myapp
└── their_app
Обычно это так ../node_modules
в основном я занимаюсь поддержкой двух мобильных приложений в одном репо. См. https://engineering.brigad.co/react-native-monorepos-code-sharing-f6c08172b417 для получения дополнительной информации.
Выданная ошибка
Error: listen EADDRINUSE :::8081означает, что что-то уже прослушивает порт 8081. Вы проверяли, прослушивает ли что-то этот порт, например. сnetstat -a | grep LISTENилиlsof -i :8081?