스크립트를로드 할 수 없습니다. Metro 서버를 실행 중이거나 번들 'index.android.bundle'이 릴리스 용으로 올바르게 패키지되어 있는지 확인하십시오.


160

react-native run-android안드로이드 시뮬레이터에 메시지를 남기면 명령이 종료됩니다. 메시지는 다음과 같습니다.

스크립트를로드 할 수 없습니다. Metro 서버를 실행 중이거나 번들 'index.android.bundle'이 릴리스 용으로 올바르게 패키지되어 있는지 확인하십시오.

스크린 샷

내가 뭘 잘못하고 있죠?


이 링크를 사용해 볼 수 있습니까 stackoverflow.com/questions/32572399/…
errorau

5
장치가 인터넷에 연결되어 있지 않기 때문에 같은 문제가 있습니다.
Huo Chhunleng 1

이 오류가 발생합니다 : thrower; // 처리되지 않은 '오류'이벤트
Saeed

나는 그것을 발견하고 아래로 넣어 stackoverflow.com/a/58570426/6852210
알리레자

@ 벨 솔루션, 당신은 어떤 해결책을 찾았습니까?
Hitesh

답변:


95

아직 번 들러를 시작하지 않았습니다. 전에 npm start또는 react-native start프로젝트의 루트 디렉토리에서 실행하십시오 react-native run-android.


먼저 react-native start를 실행하지만 react-native run-android를 실행하면 빌드 성공 후 종료됩니다
Belle Solutions

12
동시에 2 개의 노드 콘솔을 실행해야합니다. 하나는 번 들러를 시작하고 실행하고 다른 하나는 에뮬레이터를 실행합니다.
Nerdragen

27
나를 위해, 번 들러가 시작된 경우에도이 오류가 나타납니다.
P.Lorand

2
포트 8081이 차단되지 않았는지 확인하십시오. 또한 한 터미널을 사용하여 번 들러를 시작하고 종속성 그래프로드가 완료 될 때까지 기다린 다음 다른 터미널에서 반응 네이티브 실행 안드로이드를 실행하십시오.
Nerdragen

1
Windows에서는 자체적으로 실행되지만 Linux에서는 그렇지 않습니다. 완벽하게 작동하십시오!
Adrian Serna

62

이 단계는 실제로 나를 도와줍니다.

1 단계 : android / app / src / main / assets에 디렉토리 생성

리눅스 명령 :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
Saeed

@ Arbaz.in 어쩌면 index.js루트 디렉토리에 파일 이있을 수 있습니다.이 경우 이름을 바꿀 필요가 없습니다
Saeed

@Saeed yes 그것을 발견
Arbaz.in

4
이것은 현재 앱을 실행할 수 있지만 어떻게 디버깅 및 핫로드를 활성화합니까? 이 작업을 수행하기위한 완벽한 솔루션은 아닙니다.
buddhiv

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에서 나를 위해 일했습니다.
Żabojad

2
불행히도 이것은 나를 위해 작동하지 않았습니다. Metro Bundler가 실행 중이지만 이미이 문제가 발생했지만 여전히 동일한 오류가 발생합니다.
Andrew

networkSecurityConfig가 정의 된 경우 때로는 추가 재정의가 필요하다는 것을 알았습니다. 항상 문제가되는 이러한 설정 인 것 같습니다. 보안 구성을 제거 android:usesCleartextTraffic="true"하고 기본 설정 에서 AndroidManifest.xml작동하는지 지정할 수 있습니까?
Tom

이것은 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-C:\Users\your user name\AppData\Roaming\npm 사용자 변수 대신 시스템 변수 에 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을 열고 다음으로 이동하십시오.

genymotion menu -> Settings -> ADB -> 그런 다음 선택하십시오 use custom android sdk tools(sdk 위치를 찾으려면 찾아보기를 클릭하십시오)

마지막으로 프로젝트를 다시 실행하십시오.


1
12.9도 나를 위해 일했습니다. 감사합니다. 버전 12.13.x로 업그레이드하고 위의 문제가 발생하기 시작했습니다.
Huey Mataruse


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가 있다면 시도해보십시오.
푸에르

감사합니다, 내 프로젝트를 저장
Rafid

나는 이틀 동안 여기에 갇혀 있었고, 그것이 막힌 항구라고 생각하지 않았을 것입니다! 고마워요!
P. Naoum

브라우저에서 localhost : 8081을 치려고했지만 운이 없습니다. 약간의 연구를 통해 macafee가 해당 포트를 차단했다는 것을 알았습니다. 당신의 길을 따라 갔다. 완벽하게 작동하기 시작했습니다.
Tushar Jajodia

17

node_modules \ metro-config \ src \ defaults \ blacklist.js에 3 개의 스플래시를 추가하십시오.

이 부분을 교체하십시오 :

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 2016 년

하루 종일 도서관을 전환하려고
Adam Katz

10

[빠른 답변]

내 작업 공간 에서이 문제를 해결하려고 시도한 후 해결책을 찾았습니다.

이 오류는 NPM과 노드 버전의 일부 조합을 사용하는 Metro에 문제가 있기 때문입니다.

두 가지 대안이 있습니다.

  • 대안 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

나도 일했다. 그러나 왜 그것을 수정해야합니까? 무엇이 잘못 되었나요?
Mashrur

그것의 모양에서 metro-config/ 대신 경로에 \를 사용 했습니다 .이 대답은 수정을 제안합니다. 하지 마십시오 . npm 패키지를 수정하면 전체 팀이 시스템, CI, 준비, 프로덕션 및 metro-config에서 업데이트를 릴리스 할 때마다이 작업을 수행해야합니다. 더 나은 접근 방식은 GitHub에서 metro-config를 포크하고 수정을 커밋하고 PR을 푸시하여 제출하여 모든 사람을 위해 수정하는 것입니다.
카메론 윌비

6

Android 9.0 (API 레벨 28)부터 일반 텍스트 지원이 기본적으로 사용되지 않습니다.

정상적인 실행 명령을 올바르게 수행하면이 문제를 해결하기 위해해야 ​​할 일입니다.

  1. npm 설치
  2. 반응 네이티브 시작
  3. 반응 네이티브 런 안드로이드

그리고 이와 같이 안드로이드 매니페스트 파일을 수정하십시오.

<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.6에서 노드 버전 12.6으로 반응하는 버전에서 오류가 발생한다는 것을 알고 있습니다.


4

이것에 대한 나의 해결책은 다음과 같습니다.

메트로 서버 시작

$ react-native start

안드로이드 시작

$ react-native run-android

"포트 8081이 이미 사용 중"이라는 오류가 표시되면 해당 프로세스를 종료하고 다시 실행할 수 있습니다

$ react-native start

기본 문제 해결 페이지 반응을 참조하십시오 .


4

리눅스에 있다면 앱 루트 디렉토리에서 터미널을 열고 실행하십시오.

npm start

그런 다음 다른 터미널 창을 열고 다음을 실행하십시오.

react-native run-android

3

여기서 다루지 않은 명백한 가능성을 추가하고 싶습니다. 내가 사용하고 @ 반응 - 기본 - 사회 / netinfo 주로 네트워크 상태 네트워크 변화를 감지합니다. 네트워크 꺼짐 상태를 테스트하려면 에뮬레이터의 WIFI 스위치를 꺼야합니다. 또한 에뮬레이터와 디버그 환경 사이의 브리지를 효과적으로 차단합니다. 컴퓨터가 없어서 다시 돌아 왔을 때 즉시 잊어 버렸기 때문에 테스트 후 WIFI를 다시 활성화하지 않았습니다.

이것은 다른 누군가에게도 해당 될 수 있으며 다른 과감한 조치를 취하기 전에 점검 할 가치가 있습니다.


3

나는 똑같은 문제를 겪고 있었고, 문제는 adb 가 올바른 환경 경로에 있지 않다는 것입니다. 오류는 메트로 포트를 말하고 있습니다.

환경 변수 추가 (ADB)

  1. 열린 환경 변수
  2. 두 번째 프레임 PATH 변수 에서 선택하고 아래 편집 옵션을 클릭하십시오.
  3. 추가 옵션을 클릭하십시오
  4. SDK 플랫폼 도구 경로 C : \ Users \ My User \ AppData \ Local \ Android \ Sdk \ platform-tools를 제출하십시오.

참고 : 또는 컴퓨터의 adb.exe 위치에 따라

  1. 변경 사항을 저장하다

안드로이드 빌드를 다시 실행

$ react-native run-android

또는

$ react-native start

$ react-native run-android

3

나는 또한이 문제에 직면했다. 이 단계를 해결했습니다.

환경 Veritable 에서 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 / 지하철 설정 / SRC / 기본 / blacklist.js

그런 다음 npx react-native run-android --port 9001을 실행하십시오.

행복한 코딩 ..!


2

Wifi가 실수로 에뮬레이터에서 꺼 졌기 때문에이 문제가 발생했습니다 .i를 다시 켜고 제대로 작동하기 시작했습니다. 누군가에게 도움이되기를 바랍니다.


2

이 오류의 가능성은 잘못된 경로입니다. 한 번 확인하십시오.

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

이것을 생각하지 마십시오. 그러나 이것은 저에게 답이었습니다.
Siraj Alam

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

기본적으로 "Metro Server"라는 작은 JavaScript 서버는 포트 8081에서 실행됩니다.

이 서버를 시작하려면이 포트를 사용 가능하게해야합니다. 그래서,

  1. 항구를 풀다
  2. 가상 장치를 닫습니다
  3. "반응 네이티브 실행 안드로이드".

포트를 해제하는 방법?

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

Windows의 localhost에서 현재 포트를 사용하는 프로세스를 종료하는 방법은 무엇입니까?

가장 중요한 것은 facebook @ https://facebook.github.io/react-native/docs/getting-started에서 제안한대로 노드 버전을 8.x에서 10.x (최신)로 업그레이드했습니다.


1

나 에게이 문제는 react-native 업그레이드로 시작되었습니다. 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
        ...
    }
    ...
}

goole play console에 build (.apk)를 업로드하려고 할 때 경고에 따라 targetSdkVersion을 27에서 28로 변경해야했습니다. 나는 이것이 위의 오류의 근본 원인이라는 것을 거의 알지 못했습니다. @tom과 @tinmarfrutos의 즉각적인 답변은 절대적으로 의미가 있습니다.

android / app / src / debug / AndroidManifest.xml에 android : usesCleartextTraffic = "true"를 추가하여 문제를 해결했습니다.


1

필자의 경우 에뮬레이터에서 프록시를 설정했습니다. 해당 프록시를 제거한 후 정상적으로 작동합니다.


1

중요-사용자 환경에 많은 가상 장치가있을 수 있습니다. AVD를 변경하는 경우 설정을 다시 반복하십시오.

디버그 정보

위의 오류가 발생하면 먼저 포트 8081에서 실행중인 것을 확인해야합니다

그것을 찾는 가장 빠른 방법은 터미널에서 다음 명령을 사용하는 것입니다

netstat -aon | findstr 8081

그것이 당신에게 무언가를 보여 주면 그것은 포트가 차단되었음을 의미합니다. 가능하면 해당 포트를 차단 해제하십시오.

그렇지 않으면 포트를 변경해야합니다. 그 과정은 Naveen Kumar의 위의 의견에서 이미 언급되었습니다.

react-native run-android --port=9001

9001도 사용하지 마십시오 :)


1

위의 솔루션에서 언급 한 모든 것을 시도한 경우 다음 단계를 수행하십시오.

  1. android / app / src / main / assets에서 파일 생성
  2. 다음 명령을 실행하십시오.

반응 네이티브 번들-플랫폼 안드로이드 --dev false-엔트리 파일 index.js-번들 출력 android / app / src / main / assets / index.android.bundle --assets-dest android / app / src / main / res

  1. 예를 들어 반응 네이티브 런 안드로이드와 같은 빌드 명령을 실행하십시오.

와우 이것은 부분적으로 도움이되었습니다. 나는 안드로이드에 대한 새로운 자산 아이콘을 추가하고 대상 versin을 28로 변경하는 것만으로 Google Play 마켓에 대한 내 응용 프로그램을 준비하고있었습니다. 나는 v27 버전으로 다시 변경하고 모두 다시 작동하기 시작했습니다 ... 왜 반응하지 않는지 모르겠습니다. SDK v28.
Michail Pidgorodetskiy

0

다음을 시도하십시오.

  1. Android 및 IOS 폴더 제거
  2. 반응 네이티브 꺼내기 실행
  3. 반응 네이티브 실행 안드로이드 실행

어쩌면 이전 단계 후에 npm start---reset-cache를 실행했을 수 있습니다.

나는 일하고, 그것이 당신을 돕기를 바랍니다.


0

Linux OS에서 실행중인 경우 npm 원격 서버가 실행되지 않는 경우가 있습니다. 다른 터미널 (프로젝트 디렉토리 포함)을 열고 sudo react-native run-android를 수행하기 전에 sudo npm start 또는 sudo react-native start 명령을 실행하십시오.


0

에뮬레이터의 오류 메시지는 오해의 소지가 있습니다. 제 경우에는 맥북을 사용했습니다. 을 실행하여 android / gradlew에 대한 권한을 변경해야 $ chmod 755 ./gradlew했고 앱을 빌드하고 android 에뮬레이터에 배포 할 수있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.