Неможливо завантажити скрипт. Переконайтеся, що ви або запускаєте сервер метрополітену, або ваш пакет "index.android.bundle" пакується правильно для випуску


160

react-native run-androidкоманда припиняється, залишаючи повідомлення в Android-симуляторі. Повідомлення таке:

Неможливо завантажити скрипт. Переконайтеся, що ви або запускаєте сервер метрополітену, або що ваш пакет "index.android.bundle" упакований правильно для випуску.

Знімок екрана

Що я роблю неправильно?


ви можете спробувати це посилання stackoverflow.com/questions/32572399/… ?
errorau

5
У мене така ж проблема, оскільки мій пристрій не підключено до Інтернету.
Хуо Чхунленг

Ця помилка відбувається: кинути er; //
Saeed

я знайшов його і покласти його stackoverflow.com/a/58570426/6852210
Реза

@Belle Solution, ти знайшов якесь рішення?
Хітеш

Відповіді:


95

Ви ще не запустили постачальника. Запустіть npm startабо react-native startв кореневому каталозі вашого проекту раніше react-native run-android.


спершу я запускаю
Belle Solutions,

12
Потрібно одночасно працювати консоль 2 вузлів. Один запускає та запускає пакет, інший запускає емулятор.
Nerdragen

27
Для мене ця помилка з’являється навіть у випадку запуску пакета.
P.Lorand

2
Переконайтесь, що порт 8081 не заблокований. Крім того, переконайтеся, що ви використовуєте один термінал для запуску постачальника, дочекайтеся, коли він закінчить завантажувати графік залежності, а потім запустіть натиснутий на іншій терміналі реактивний run-android.
Нердраген

1
У Windows він працює сам, але в Linux це не так, thx! Робота ідеально!
Адріан Серна

62

Ці кроки мені справді допомагають:

Крок 1: Створіть каталог в android / app / src / main / активи

Команда Linux :mkdir android/app/src/main/assets

Крок 2: Перейменуйте index.android.js(у кореневому каталозі) на index.js( Можливо, є index.jsфайл, у цьому випадку вам не потрібно його перейменовувати ), після чого запустіть таку команду:

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

Крок 3. Створіть свій APK:react-native run-android

Будь ласка, використовуйте index.js в останній версії.

Насолоджуйтесь :)


Яке розташування цього файлу в реагуванні на рідний проект index.android.j
Arbaz.in

@ Arbaz.in у кореневому каталозі.
Саїд

@ Arbaz.in Можливо, index.jsв кореневому каталозі є файл, і в цьому випадку вам не потрібно його перейменовувати
Saeed

@Saeed так знайшли
Arbaz.in

4
Це може запустити додаток лише на даний момент, але як це дозволить налагоджувати та гарячу завантаження? це не ідеальне рішення для цього.
буддів

39

Для мене ця помилка була викликана оновленням реагування на нативні

Починаючи з Android 9.0 (рівень API 28), підтримка чіткого тексту відключена за замовчуванням.

Якщо ви перевіряєте розширення оновлення, вам потрібно створити маніфест налагодження android/app/src/debug/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" />
</manifest>

Докладнішу інформацію див. На веб-сторінці : https://stackoverflow.com/a/50834600/1713216

https://react-native-community.github.io/upgrade-helper/


1
Працював для мене на RN 0,61.3.
boabojad

2
На жаль, це для мене не вийшло. У мене це вже було, і я все одно отримую ту саму помилку, навіть незважаючи на те, що Metro Bundler працює.
Андрій

Я виявив, що мені іноді потрібні додаткові зміни, якщо у мене визначено networkSecurityConfig, але, здається, завжди ці налаштування викликають проблеми для мене. Ви можете спробувати видалити будь-який конфігурацію безпеки та вказати android:usesCleartextTraffic="true"в головному, AndroidManifest.xmlчи не працює це?
Том

Це працювало для мене на RN 0,62
KevinAdu

У мене є всі ці налаштування, включаючи android: usesCleartextTraffic = "true", але я все ще не можу запустити додаток на реальному пристрої.
Lucky_girl

25

Спочатку виконайте кроки 4 і 5, після чого можна запустити проект. Якщо ви не отримаєте результату (з кроками 4 та 5), виконайте наступні дії

1- Спробуйте зменшити версію вузла (поточна версія 12.13.1)

  choco uninstall nodejs
  choco install nodejs --version 12.8

2- Додайте шлях модуля npm ( C:\Users\your user name\AppData\Roaming\npm) до системних змінних замість змінних користувачів

3- Встановіть реакцію нативного глобально за допомогою команди

  npm install -g react-native-cli

4- Перейдіть до кореня каталогу проекту та запустіть таку команду:

  react-native start

5- Відкрийте інший термінал у корені проекту та запустіть таку команду:

   react-native run-android 

Редагувати:

Ви використовуєте Genymotion? Якщо так, виконайте наступний крок:

Після вищевказаного кроку, якщо ви отримаєте наступну помилку?

error Failed to launch emulator. Reason: No emulators found as an output of `emulator -list-avds`.

Відкрийте свою генімотию та перейдіть до:

genymotion menu -> Settings -> ADB -> Потім виберіть use custom android sdk tools(натисніть кнопку Переглянути, щоб знайти розташування sdk)

Нарешті, запустіть проект знову.


1
12.9 також працював для мене, дякую, я перейшов до версії 12.13.x і почав отримувати вищевказану проблему.
Huey Mataruse

Передумови до цієї відповіді: github.com/facebook/react-native/isissue/26598
Крістіан Давен

18

Ви можете спробувати наступне:

Додайте цей рядок у свій AndroidManifest.xml

<application
[...]
android:usesCleartextTraffic="true"
/>
[...]
</application>

18

Подібна проблема трапилася і зі мною.
Мабуть, Mcafee блокує 8081 порт. Мені потрібні години, щоб зрозуміти це.

Спробуйте запустити:

react-native run-android --port=1234

Коли програма з’явиться з помилкою на емуляторі, перейдіть до налаштувань програми ( Ctrl+ M).

Змініть "Хост і порт сервера налагодження для пристрою" на "localhost: 1234".

Закрийте додаток і запустіть його з ящика додатків.


1
дякую за підказку, мені довелося відкрити порт 8081 у своєму брандмауері, і він почав працювати
ukie

Великий результат для цього. Якщо у вас є Mcafee, я б спробував це, це спрацювало для мене.
Пуерто

Дякую, врятував мій проект
Рафід,

Я застряг тут два дні, ніколи б не подумав, що це заблокований порт! Дуже дякую!
П. Наум

Я намагався потрапити на localhost: 8081 у браузері, але не пощастило. Невелике дослідження та з’ясував, що macafee заблокував цей порт. Прослідував свій шлях. Почав працювати чудово.
Tushar Jajodia

17

просто додайте три сплески в: node_modules \ metro-config \ src \ defaults \ blacklist.js

замініть цю частину:

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

12

якщо у вас все правильно налаштовано, спробуйте це:

adb зворотний tcp: 8081 tcp: 8081

Чому? "Коли працює пакувач RN, у вашому браузері є активний веб-сервер, доступний за номером 127.0.0.1:8081. Саме на цьому сервері пакет JS для вашої програми подається та оновлюється під час внесення змін. Без зворотного проксі, ваш телефон не зможе підключитися до цієї адреси. "

всі кредити Swingline0


Не могли б ви додати свою відповідь, чому це має працювати і що ця команда робить?
creyD

цілий день пробував перемикати бібліотеки, і це була моя проблема
Адам Кац

10

[Швидкий відповідь]

Після спробу вирішити цю проблему в моєму робочому просторі я знайшов рішення.

Ця помилка пов’язана з тим, що у Metro є проблема використання деяких комбінацій версії NPM та Node.

У вас є дві альтернативи:

  • Альтернатива 1: Спробуйте оновити або зменшити версію npm та версії вузла.
  • Альтернатива 2: Перейдіть до цього файлу: \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__\/.*/
    ];

    Зверніть увагу, що якщо ви запускаєте npm installабо, yarn installвам потрібно буде знову змінити код.


8

Це спрацювало для мене, спробувавши кілька способів.

У файлі 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__\/.*/
];

сподіваюся, що це допомагає.


Працював як шарм, спасибі
César Bermúdez

Працював і для мене. Але, чому мені довелося це виправити? Що пішло не так?
Машюр

З його вигляду metro-configвикористовується \ для шляхів замість /, які ця відповідь пропонує змінити. Не робіть цього . Змінення пакетів npm означає, що вся ваша команда повинна робити це на своїй машині, в CI, в постановці, у виробництві, і кожен раз, коли met-config випускає оновлення. Кращий підхід - розправити метро-конфігурацію на GitHub, здійснити виправлення, натиснути та подати PR, щоб виправити це для всіх.
Камерон Вілбі

6

Починаючи з Android 9.0 (рівень API 28), підтримка чіткого тексту відключена за замовчуванням.

Це те, що вам потрібно зробити, щоб позбутися цієї проблеми, якщо ви виконаєте звичайні команди запуску належним чином

  1. npm встановити
  2. реагувати-рідний початок
  3. react-native run-android

І змініть свій файл маніфесту Android, як це.

<application
    android:name=".MainApplication"
    android:icon="@mipmap/ic_launcher"
    android:usesCleartextTraffic="true" // add this line with TRUE Value.
android:theme="@style/AppTheme">

5

Після годин пошуку відповіді. Рішення полягало в тому, щоб зробити понижуючий вузол до версії 12.4.

У моєму випадку я розумію, що помилка просто виникає у версії реакції нативної 0,60 з версією 12.6.


4

Моє рішення для цього полягає в наступному:

Запустіть сервер метрополітену

$ react-native start

Запустіть Android

$ react-native run-android

Якщо ви бачите помилки, що говорять про "порт 8081 вже використовується", ви можете вбити цей процес і повторно запустити

$ react-native start

Див . Сторінку "Реагувати нативну проблему" .


4

Якщо ви перебуваєте в Linux, відкрийте термінал із кореневого каталогу програми та запустіть

npm start

потім відкрийте інше вікно терміналу і запустіть:

react-native run-android

3

Я просто хочу додати не очевидну можливість, яка тут не охоплена. Я використовую @ reakct-native-community / netinfo для виявлення змін мережі, насамперед стану мережі. Щоб перевірити стан відключення від мережі, перемикач WIFI (на емуляторі) потрібно вимкнути. Це також ефективно відрізає міст між емулятором та середовищем налагодження. Я не ввімкнув WIFI після моїх тестів, оскільки я був далеко від комп'ютера і негайно забув про нього, коли повернувся.

Існує ймовірність, що це може бути і для когось іншого, і його варто перевірити, перш ніж робити якісь різкі кроки.


3

У мене були ті ж проблеми, проблема для мене полягала в тому, що adb не був у потрібному середовищі, помилка повідомляє вам порт метро, ​​поки ви знаходитесь в adb, порти вбиваються та перезапускаються.

Додати змінну навколишнього середовища (ADB)

  1. Змінні відкритого середовища
  2. Виберіть з другої кадри змінну PATH та натисніть на опцію редагування нижче
  3. Клацніть на опції Додати
  4. Надіслати шлях інструментів платформи sdk C: \ Користувачі \ Мій користувач \ AppData \ Місцевий \ Android \ Sdk \ platform-tools

Примітка : Або залежно від того, де на вашій машині розміщено adb.exe

  1. Зберегти зміни

Запустити android build знову

$ react-native run-android

Або

$ react-native start

$ react-native run-android

3

Я також стикався з цим питанням. Я вирішив цей наступний крок.

Перевірте шлях Android sdk у середовищі Вірно.

Додати ANDROID_HOME = C:\Users\user_name\AppData\Local\Android\Sdkв системну змінну
та C:\Users\user_name\AppData\Local\Android\Sdk\platform-toolsшлях у системну змінну

замініть sharedBlacklist, як показано нижче в сегменті коду,

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

в node_modules / metro-config / src / default / blacklist.js

Потім запустіть npx reaktive-native run-android --port 9001

Щасливе кодування ..!


2

Я відчував це лише тому, що мій Wifi був помилково відключений на моєму емуляторі. Я його знову ввімкнув, і він почав працювати нормально. Сподіваюся, це комусь корисно


2

Рішення, яке працювало для мене, таке:

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
]; 

Мій приклад коду


2

оновіть цю частину у чорному списку метро

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

2

Я зіткнувся з тією ж проблемою, дотримуючись підручника React Native (розробляючись на Linux та орієнтуючись на Android).

Ця проблема допомогла мені вирішити проблему, виконавши наступні кроки. Виконайте наступні команди у послідовності нижче:

  1. (у довіднику проекту) mkdir android/app/src/main/assets
  2. 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
  3. react-native run-android

Ви можете автоматизувати вищевказані кроки, поміщаючи їх в scriptsчастині , package.jsonяк це:

"android-linux": "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 && react-native run-android"

Тоді ви можете npm run android-linuxщоразу виконувати з командного рядка.


1

За замовчуванням крихітний JavaScript-сервер під назвою "Metro Server" працює на порту 8081.

Вам потрібно зробити цей порт доступним для запуску цього сервера. Так,

  1. звільнити порт
  2. закрийте свій віртуальний пристрій
  3. "реагувати-нативно запустити андроїд" знову.

Як звільнити порт?

http://tenbull.blogspot.com/2019/05/how-to-kill-process-currently-using.html

Як вбити процес на даний момент за допомогою порту на localhost у Windows?

і найголовніше, що я модернізував версію вузла з 8.x до 10.x (остання), як це запропонував facebook @ https://facebook.github.io/react-native/docs/getting-started


1

Для мене ця проблема почалася з модернізації реактивного типу. Оновлення було необхідне, щоб додати 64-бітну підтримку.

Before:
-------- 
Environment:
Node: 10.15.0
npm: 6.9.0
Watchman: 4.9.0
Xcode: Not Found
Android Studio: 3.4 AI-183.6156.11.34.5692245

Packages: (wanted => installed)
react: 16.0.0-alpha.12 => 16.0.0-alpha.12
react-native: ~0.55.2 => 0.55.4
react-native-cli: 2.0.1

After:
------
info 
React Native Environment Info:
Binaries:
Node: 10.15.0
npm: 6.9.0
Watchman: 4.9.0
SDKs:
Android SDK:
API Levels: 23, 26, 27, 28
Build Tools: 27.0.3, 28.0.3
System Images: android-28 | Google APIs Intel x86 Atom
IDEs:
Android Studio: 3.4 AI-183.6156.11.34.5692245
Xcode: /undefined - /usr/bin/xcodebuild
npmPackages:
react: ^16.8.6 => 16.9.0 
react-native: 0.59.9 => 0.59.9 
npmGlobalPackages:
create-react-native-app: 2.0.2
react-native-cli: 2.0.1

Крім того, одна важлива зміна, яку я внесла до оновлення, була в ../android/build/build.gradle

android {
    ...
    defaultConfig {
        ...
        targetSdkVersion 28
        ...
    }
    ...
}

Мені довелося змінити targetSdkVersion з 27 на 28 після попередження, коли я намагався завантажити збірку (.apk) на ігрову консоль goole. Мало я зрозумів, що це була першопричиною вищевказаної помилки для мене. Негайно відповіді @tom та @tinmarfrutos мали абсолютний сенс.

Я вирішив проблему, додавши android: usesCleartextTraffic = "true" до мого android / app / src / debug / AndroidManifest.xml


1

У моєму випадку я встановив проксі в своєму емуляторі. Він працює у звичайному режимі після видалення цього проксі.


1

можливість цієї помилки - це також неправильний шлях, перевірте один раз

 export ANDROID_HOME=/Users/microrentindia/Library/Android/sdk/
 export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

Ніколи про це не думав. Але це була відповідь для мене.
Сірай Алам

1

ВАЖЛИВО - У вашому оточенні може бути багато віртуальних пристроїв. Переконайтесь, що ви змінюєте AVD, повторіть налаштування ще раз.

ІНФОРМАЦІЯ ПРО ДЕБУГ

У випадку, якщо у вас виникла помилка вище, вам доведеться першою перевірити, що працює на порту 8081

Найшвидший спосіб виявити це за допомогою наступної команди в терміналі

netstat -aon | findstr 8081

якщо це щось вам показує, це означає, що порт заблокований. якщо можливо, розблокуйте цей порт.

В іншому випадку вам потрібно буде змінити порт. Про процес цього вже згадувалося в коментарі вище, Naveen Kumar

react-native run-android --port=9001

Переконайтеся, що 9001 також не використовується :)


1

Спробуйте виконати наступні дії, якщо ви спробували все, що було зазначено у вищезазначених рішеннях:

  1. Створіть файл у android / app / src / main / активи
  2. Виконайте таку команду:

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android / app / src / main / tools / index.android.bundle --assets-dest android / app / src / головний / рез

  1. Тепер запустіть свою команду, щоб побудувати, наприклад, для react-native run-android

Нічого, це мені допомогло частково. Я готував свою програму для google play market - все, що я робив, - це додавати нові значки активів для android і змінювати ціль порівняно з 28. Мені довелося повернутися до версії v27 і все знову почати працювати ... Я не знаю, чому реагувати не працює з sdk v28.
Михайло Підгородецький

0

Спробуйте наступне.

  1. Видаліть папки Android та IOS
  2. запустити реактивний викид
  3. run react-native run-android

Можливо, після попередніх кроків у вас є виконання npm start - --reset-cache

Я працюю, сподіваюся, це допоможе тобі.


0

Якщо ви працюєте в ОС Linux, може бути випадок, коли ваш віддалений сервер npm не працює. Відкрийте інший термінал (з каталогом проекту) і запустіть цю команду sudo npm start або sudo react-native start перед тим, як зробити sudo react-native run-android


0

Повідомлення про помилку на емуляторі є дещо оманливим. У моєму випадку я використовував Macbook. Мені потрібно було змінити дозволи на android / gradlew, запустивши $ chmod 755 ./gradlew, і тоді додаток можна було б створити та розгорнути на емуляторі Android.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.