Không thể tải tập lệnh. Hãy chắc chắn rằng bạn đang chạy máy chủ Metro hoặc gói 'index.android.bundle' của bạn được đóng gói chính xác để phát hành


160

react-native run-androidlệnh chấm dứt bằng cách để lại một tin nhắn trong trình giả lập Android. Thông báo như sau:

Không thể tải tập lệnh. Hãy chắc chắn rằng bạn đang chạy máy chủ Metro hoặc gói 'index.android.bundle' của gói của bạn được đóng gói chính xác để phát hành.

Ảnh chụp màn hình

Tôi đang làm gì sai?


bạn có thể thử liên kết stackoverflow.com/questions/32572399/ này không?
errorau

5
Tôi gặp vấn đề tương tự vì thiết bị của tôi không được kết nối với internet.
Huo Chhunleng

Lỗi này đến: ném er; // Sự kiện 'lỗi' chưa được xử lý
Saeed

tôi đã tìm thấy nó và đặt nó xuống stackoverflow.com/a/58570426/6852210
Alireza

@Belle Solution, bạn đã tìm được giải pháp nào chưa?
Hitesh

Câu trả lời:


94

Bạn chưa bắt đầu gói. Chạy npm starthoặc react-native starttrong thư mục gốc của dự án của bạn trước react-native run-android.


Đầu tiên tôi chạy Reac -igen start nhưng khi chạy Reac -igen run-android, nó bị chấm dứt sau khi xây dựng thành công
Belle Solutions

12
Bạn phải có 2 nút điều khiển chạy đồng thời. Một cái khởi động và chạy bộ đóng gói, cái còn lại chạy trình giả lập.
Nerdragen

27
Đối với tôi, lỗi này xuất hiện ngay cả khi bộ đóng gói được khởi động.
P.Lorand

2
Đảm bảo cổng 8081 không bị chặn. Ngoài ra, hãy đảm bảo rằng bạn sử dụng một thiết bị đầu cuối để khởi động trình đóng gói, đợi cho nó hoàn thành tải biểu đồ phụ thuộc, sau đó chạy run-android run-android trên thiết bị đầu cuối khác.
Nerdragen

1
Trong windows nó tự chạy, nhưng trên linux thì không, thx! Làm việc hoàn hảo!
Adrian Serna

61

Những bước này thực sự giúp tôi:

Bước 1: Tạo một thư mục trong android / app / src / main / nội dung

Lệnh Linux :mkdir android/app/src/main/assets

Bước 2: Đổi tên index.android.js(trong thư mục gốc) thành index.js( Có thể có một index.jstệp trong trường hợp bạn không cần đổi tên ), sau đó chạy lệnh sau:

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ước 3: Xây dựng APK của bạn:react-native run-android

Vui lòng sử dụng index.js trong phiên bản mới nhất.

Thưởng thức :)


Vị trí của tệp này là gì trong phản ứng của chỉ số dự án gốc.android.j
Arbaz.in

@ Arbaz.in trong thư mục gốc.
Saeed

@ Arbaz.in Có thể có một index.jstệp trong thư mục gốc trong trường hợp bạn không cần đổi tên nó
Saeed

@ Có thể tìm thấy nó
Arbaz.in

3
Điều này chỉ có thể chạy ứng dụng trong lúc này nhưng làm thế nào điều này sẽ cho phép gỡ lỗi và tải nóng? đây không phải là giải pháp hoàn hảo để thực hiện điều này
phật

39

Đối với tôi, lỗi này là do sự nâng cấp của Reac -igen

Bắt đầu với Android 9.0 (API cấp 28), hỗ trợ Cleartext bị tắt theo mặc định.

Nếu bạn kiểm tra khác biệt nâng cấp, bạn cần tạo một bảng kê khai gỡ lỗi 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>

Xem để biết thêm thông tin: https://stackoverflow.com/a/50834600/1713216

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


1
Làm việc cho tôi trên RN 0.61.3.
Żabojad

2
Thật không may, điều này đã không làm việc cho tôi. Tôi đã có điều này và vẫn nhận được cùng một lỗi, mặc dù Metro Bundler đang chạy.
Andrew

Tôi đã tìm thấy đôi khi tôi cần ghi đè thêm nếu tôi xác định mạngSecurityConfig, dường như luôn có các cài đặt này gây ra sự cố cho tôi. Bạn có thể thử xóa bất kỳ cấu hình bảo mật nào và chỉ định android:usesCleartextTraffic="true"trong phần chính AndroidManifest.xmlxem nó có hoạt động không?
Tom

Điều này làm việc cho tôi trên RN 0,62
KevinAdu

Tôi có tất cả các cài đặt đó, bao gồm cả android: usedCleartextTraffic = "true", nhưng tôi vẫn không thể chạy ứng dụng trên thiết bị thực.
Lucky_girl

25

Đầu tiên làm bước 4 và 5 sau đó bạn có thể chạy dự án của mình. Nếu bạn không nhận được kết quả (với bước 4 và 5), hãy thực hiện các bước sau

1- Cố gắng hạ cấp phiên bản Nút của bạn (phiên bản hiện tại là 12.13.1)

  choco uninstall nodejs
  choco install nodejs --version 12.8

2- Thêm đường dẫn của mô đun npm ( C:\Users\your user name\AppData\Roaming\npm) vào các biến hệ thống thay vì biến người dùng

3- Cài đặt phản ứng tự nhiên trên toàn cầu bằng cách sử dụng lệnh

  npm install -g react-native-cli

4- Đi đến thư mục gốc của thư mục dự án của bạn và chạy lệnh sau:

  react-native start

5- Mở một thiết bị đầu cuối khác trong thư mục gốc của dự án của bạn và chạy lệnh sau:

   react-native run-android 

BIÊN TẬP :

Bạn đang sử dụng Genymotion? Nếu có, hãy làm bước sau:

Sau bước trên nếu bạn gặp lỗi sau?

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

Mở genymotion của bạn và đi đến:

genymotion menu -> Settings -> ADB -> Sau đó chọn use custom android sdk tools(nhấp vào duyệt để tìm vị trí sdk)

Cuối cùng, chạy dự án của bạn một lần nữa ..


1
12.9 cũng hoạt động với tôi, Cảm ơn, tôi đã nâng cấp lên phiên bản 12.13.x và bắt đầu gặp sự cố trên.
Huey Mataruse

Bối cảnh cho câu trả lời này: github.com/facebook/react-native/issues/26598
Christian Davén

18

Bạn có thể thử như sau:

Thêm dòng này trên AndroidManifest.xml của bạn

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

18

Một vấn đề tương tự đã xảy ra với tôi.
Rõ ràng Mcafee chặn cổng 8081. Mất tôi hàng giờ để tìm ra điều này.

Hãy thử chạy:

react-native run-android --port=1234

Khi ứng dụng xuất hiện lỗi trên trình giả lập, hãy vào cài đặt dev ( Ctrl+M ).

Thay đổi "Máy chủ gỡ lỗi và cổng cho thiết bị" thành "localhost: 1234".

Đóng ứng dụng và khởi động nó từ ngăn kéo ứng dụng.


1
cảm ơn vì một gợi ý, tôi đã phải mở cổng 8081 trong tường lửa của mình và nó bắt đầu hoạt động
ukie

Upvote lớn cho điều này. Nếu bạn có Mcafee, tôi sẽ thử nó, nó hiệu quả với tôi.
Puerto

Cảm ơn, đã lưu dự án của tôi
Rafid

Tôi đã bị kẹt ở đây hai ngày, sẽ không bao giờ nghĩ đó là một cổng bị chặn! Cảm ơn rất nhiều!
P. Naoum

Tôi đã cố gắng nhấn localhost: 8081 trong trình duyệt nhưng không gặp may. Ít nghiên cứu và phát hiện ra rằng macafee đã chặn cổng đó. Theo cách của bạn. Bắt đầu làm việc hoàn toàn tốt.
Tushar Jajodia

17

chỉ cần thêm ba giật gân trong: node_modules \ metro-config \ src \ defaults \ blacklist.js

thay thế phần này:

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

12

Nếu bạn có mọi thứ được cấu hình chính xác thì hãy thử điều này:

adb đảo ngược tcp: 8081 tcp: 8081

Tại sao? "Khi trình đóng gói RN đang chạy, có một máy chủ web hoạt động có thể truy cập trong trình duyệt của bạn tại 127.0.0.1:8081. Từ máy chủ này, gói JS cho ứng dụng của bạn được phục vụ và làm mới khi bạn thực hiện thay đổi. Điện thoại của bạn sẽ không thể kết nối với địa chỉ đó. "

tất cả các khoản tín dụng cho Swingline0


Bạn có thể vui lòng thêm vào câu trả lời của bạn tại sao điều này nên hoạt động và lệnh này làm gì?
creyD

đã dành cả ngày để cố gắng chuyển đổi các thư viện và đây là vấn đề của tôi
Adam Katz

10

[Câu trả lời nhanh]

Sau khi cố gắng giải quyết vấn đề này trong không gian làm việc của tôi, tôi đã tìm thấy một giải pháp.

Lỗi này là do có vấn đề với Metro khi sử dụng một số kết hợp phiên bản NPM và Node.

Bạn có 2 lựa chọn thay thế:

  • Thay thế 1: Cố gắng cập nhật hoặc hạ cấp npm và phiên bản nút.
  • Thay thế 2: Chuyển đến tệp này: \node_modules\metro-config\src\defaults\blacklist.jsvà thay đổi mã này:

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

    và thay đổi điều này:

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

    Xin lưu ý rằng nếu bạn chạy một npm installhoặc yarn installbạn cần thay đổi lại mã.


8

Điều này làm việc cho tôi sau khi thử một số cách.

Trong file node_modules\metro-config\src\defaults\blacklist.js

Thay thế :

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

với :

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

hi vọng điêu nay co ich.


Làm việc như một cơ duyên, Cảm ơn
César Bermúdez

Làm việc cho tôi, quá. Nhưng, tại sao tôi phải sửa nó? Có chuyện gì?
Mashrur

Từ vẻ ngoài của nó, metro-configđược sử dụng \ cho các đường dẫn thay vì /, mà câu trả lời này gợi ý để sửa đổi. Đừng làm điều này . Sửa đổi các gói npm có nghĩa là toàn bộ nhóm của bạn phải thực hiện việc này trên máy của họ, trong CI, theo giai đoạn, trong sản xuất và mỗi khi metro-config phát hành bản cập nhật. Cách tiếp cận tốt hơn là rẽ nhánh metro-config trên GitHub, cam kết sửa lỗi, đẩy và gửi PR để sửa lỗi cho mọi người.
Cameron Wilby

6

Bắt đầu với Android 9.0 (API cấp 28), hỗ trợ Cleartext bị tắt theo mặc định.

Đây là những gì bạn cần làm để thoát khỏi vấn đề này nếu bạn thực hiện các lệnh chạy bình thường đúng cách

  1. cài đặt npm
  2. bắt đầu phản ứng
  3. run-android run-android

Và sửa đổi tệp kê khai Android của bạn như thế này.

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

5

Sau nhiều giờ tìm kiếm câu trả lời. Giải pháp là tạo một nút hạ cấp xuống phiên bản 12.4.

Trong trường hợp của tôi, tôi nhận ra rằng lỗi chỉ xảy ra trong phiên bản phản ứng gốc 0.60 với phiên bản nút 12.6.


4

Giải pháp của tôi cho vấn đề này là như sau:

Khởi động máy chủ Metro

$ react-native start

Khởi động Android

$ react-native run-android

Nếu thấy lỗi "cổng 8081 đã được sử dụng", thì bạn có thể tắt quy trình đó và chạy lại

$ react-native start

Xem trang Xử lý sự cố bản địa .


4

Nếu bạn đang dùng linux, hãy mở terminal từ thư mục gốc của ứng dụng và chạy

npm start

sau đó mở một cửa sổ terminal khác và chạy:

react-native run-android

3

Tôi chỉ muốn thêm một khả năng không rõ ràng không được đề cập ở đây. Tôi đang sử dụng @ Reac -igen-Community / netinfo để phát hiện các thay đổi mạng, chủ yếu là trạng thái mạng. Để kiểm tra trạng thái tắt mạng, công tắc WIFI (trên trình giả lập) cần được tắt. Điều này cũng có hiệu quả cắt đứt cầu nối giữa trình giả lập và môi trường gỡ lỗi. Tôi đã không kích hoạt lại WIFI sau khi thử nghiệm vì tôi đã rời khỏi máy tính và nhanh chóng quên nó khi tôi quay trở lại.

Có khả năng đây có thể là trường hợp của người khác và cũng đáng kiểm tra trước khi thực hiện bất kỳ bước quyết liệt nào khác.


3

Tôi cũng gặp rắc rối tương tự, vấn đề đối với tôi là adb không đi đúng đường môi trường, lỗi là thông báo cho bạn cổng metro, trong khi bạn ở adb, cổng bị giết và khởi động lại.

Thêm biến môi trường (ADB)

  1. Biến môi trường mở
  2. Chọn từ biến PATH khung thứ hai và nhấp vào tùy chọn chỉnh sửa bên dưới
  3. Bấm vào tùy chọn thêm
  4. Gửi đường dẫn công cụ nền tảng sdk C: \ Users \ My User \ AppData \ Local \ Android \ Sdk \ platform-tools

Lưu ý : Hoặc tùy thuộc vào vị trí adb.exe nằm trong máy của bạn

  1. Lưu thay đổi

Chạy lại bản dựng Android

$ react-native run-android

Hoặc là

$ react-native start

$ react-native run-android

3

Tôi cũng đã phải đối mặt với vấn đề này. Tôi đã giải quyết bước sau đây.

Kiểm tra đường dẫn sdk android trong Môi trường xác thực.

Thêm ANDROID_HOME = C:\Users\user_name\AppData\Local\Android\Sdkvào Biến hệ thống
C:\Users\user_name\AppData\Local\Android\Sdk\platform-toolsđường dẫn trong Biến hệ thống

thay thế sharedBlacklist như đoạn mã dưới đây,

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

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

Sau đó chạy npx Reac -igen run-android --port 9001

Chúc mừng mã hóa ..!


2

Tôi đã trải nghiệm điều này chỉ vì Wifi của tôi bị tắt nhầm trên trình giả lập. Tôi bật lại và nó bắt đầu hoạt động tốt. Hy vọng nó hữu ích cho ai đó


2

Giải pháp hiệu quả với tôi là như sau:

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

Ví dụ mã của tôi


2

cập nhật phần này trong danh sách đen metro

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

2

Tôi đã gặp phải vấn đề tương tự trong khi làm theo hướng dẫn React Native (phát triển trên Linux và nhắm mục tiêu Android).

Đây vấn đề đã giúp tôi giải quyết vấn đề trong các bước tiếp theo. Chạy các lệnh sau theo trình tự dưới đây:

  1. (trong thư mục dự án) 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

Bạn có thể tự động hóa các bước trên bằng cách đặt chúng vào scriptsmột phần package.jsonnhư thế này:

"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"

Sau đó, bạn có thể chỉ cần thực hiện npm run android-linuxtừ dòng lệnh của bạn mỗi lần.


1

Hãy thử như sau.

  1. Xóa các thư mục Android và IOS
  2. chạy phản ứng gốc
  3. chạy Reac -igen run-android

Có thể sau các bước trước, bạn đã thực hiện bắt đầu npm - --reset-cache

Tôi làm việc, tôi hy vọng nó sẽ giúp bạn.


1

Theo mặc định, một máy chủ JavaScript nhỏ gọi là "Máy chủ Metro" chạy trên cổng 8081.

Bạn cần phải cung cấp cổng này cho Máy chủ này để bắt đầu. Vì thế,

  1. phát hành cổng
  2. đóng thiết bị ảo của bạn
  3. "Reac -igen run-android" một lần nữa.

Làm thế nào để phát hành cổng?

http://tenbull.blogspot.com/2019/05/how-to-kill- Process-c Hiệnly-USE.html

Làm thế nào để giết quá trình hiện đang sử dụng một cổng trên localhost trong windows?

và quan trọng nhất, tôi đã nâng cấp phiên bản nút của mình từ 8.x lên 10.x (mới nhất), theo đề xuất của facebook @ https://facebook.github.io/react-native/docs/getting-started


1

Đối với tôi vấn đề này bắt đầu với việc nâng cấp Reac -igen. Việc nâng cấp là cần thiết để thêm hỗ trợ 64 bit.

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

Ngoài ra, một thay đổi quan trọng mà tôi đã thực hiện để nâng cấp là trong ../android/build/build.gradle

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

Tôi đã phải thay đổi targetSdkVersion từ 27 thành 28 cảnh báo sau khi tôi cố tải lên bản dựng (.apk) lên goole play console. Tôi không nhận ra rằng đây là nguyên nhân gốc rễ của lỗi trên đối với tôi. Ngay lập tức câu trả lời của @tom và @tinmarfrutos hoàn toàn có ý nghĩa.

Tôi đã giải quyết vấn đề bằng cách thêm android: usedCleartextTraffic = "true" vào android / app / src / debug / AndroidManifest.xml của tôi


1

Trong trường hợp của tôi, tôi đã đặt proxy trong trình giả lập của mình. Nó hoạt động trở lại bình thường sau khi tôi gỡ bỏ proxy đó.


1

khả năng lỗi này cũng là đường dẫn sai, kiểm tra một lần

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

Không bao giờ nghĩ về điều này. Nhưng đây là câu trả lời cho tôi.
Siraj Alam

1

QUAN TRỌNG - Bạn có thể có nhiều thiết bị ảo trong môi trường của mình. Đảm bảo nếu bạn đang thay đổi AVD, bạn lặp lại cài đặt.

THÔNG TIN DEBUG-

Trong trường hợp bạn gặp phải lỗi trên, bạn phải xác minh trước những gì đang chạy trên cổng 8081

Cách nhanh nhất để tìm thấy đó là sử dụng lệnh sau trong terminal

netstat -aon | findstr 8081

nếu điều đó cho bạn thấy một cái gì đó có nghĩa là cổng bị chặn. nếu có thể có được cổng đó bỏ chặn.

Nếu không, bạn sẽ cần phải thay đổi cổng. Quá trình để làm điều đó đã được đề cập trong bình luận ở trên bởi Naveen Kumar

react-native run-android --port=9001

Đảm bảo 9001 cũng không được sử dụng :)


1

Hãy thử các bước sau nếu bạn đã thử mọi cách được đề cập trong các giải pháp trên:

  1. Tạo tệp trong android / app / src / main / nội dung
  2. Chạy lệnh sau:

gói phản ứng gốc - nền tảng android --dev false --entry-file index.js --bundle-output android / app / src / main / finance / index.android.bundle --assets-Dest android / app / src / chính / độ phân giải

  1. Bây giờ hãy chạy lệnh của bạn để xây dựng ví dụ: run-android run-android

Wow điều này đã giúp tôi một phần. Tôi đã chuẩn bị ứng dụng cho thị trường google play, tất cả những gì tôi đã làm là thêm các biểu tượng tài sản mới cho Android và đổi mục tiêu thành 28. Tôi phải đổi lại phiên bản v27 và tất cả bắt đầu hoạt động trở lại ... Tôi không biết tại sao phản ứng không hoạt động với sdk v28.
Michail Pidgorodetskiy

0

Nếu bạn đang chạy trên HĐH Linux, có thể có trường hợp máy chủ từ xa npm của bạn không chạy. Mở một thiết bị đầu cuối khác (với thư mục dự án) và chạy lệnh này sudo npm start hoặc sudo Reac -igen start trước khi thực hiện sudo Reac -igen run-android


0

Thông báo lỗi trên trình giả lập là loại sai lệch. Trong trường hợp của tôi, tôi đã sử dụng Macbook. Tôi cần thay đổi quyền trên android / gradlew bằng cách chạy $ chmod 755 ./gradlew, và sau đó ứng dụng có thể được xây dựng và triển khai cho trình giả lập Android.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.