스크립트를로드 할 수 없습니다. 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.