无法加载脚本。请确保您正在运行Metro服务器,或者已正确捆绑了软件包“ index.android.bundle”以进行发布

时间:2019-03-31 13:11:07

标签: react-native react-native-android

react-native run-android通过在android模拟器中的消息中保留一条消息来终止。消息如下

无法加载脚本。请确保您正在运行Metro服务器,或者已正确捆绑了软件包“ index.android.bundle”以进行发布。

我完全感到困惑,这是在做错什么。


编辑:添加错误屏幕截图

enter image description here

48 个答案:

答案 0 :(得分:14)

执行以下步骤:

1-尝试降级您的Node版本(当前版本为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并转到:

genymotion菜单-> 设置-> ADB -> 然后选择使用自定义android sdk工具(单击浏览以查找sdk位置)

最后,再次运行您的项目..

答案 1 :(得分:9)

您可以尝试以下操作:

将此行添加到您的AndroidManifest.xml

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

答案 2 :(得分:7)

只需在中添加三个飞溅: node_modules \ metro-config \ src \ defaults \ blacklist.js

替换此部分:

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

答案 3 :(得分:7)

尝试解决我的工作区中的问题后,我找到了解决方案。

此错误是因为Metro在使用NPM和Node版本的某些组合时出现问题。

您有2种选择:

  • 替代方法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 installyarn install,则需要再次更改代码。

答案 4 :(得分:5)

几个小时后寻找答案。解决方案是将节点降级到12.4版。

在我的情况下,我意识到该错误仅发生在版本响应本机0.60和节点版本12.6的情况下。

答案 5 :(得分:4)

在使用React Native tutorial(在Linux上开发并定位到Android)时,我遇到了相同的问题。

issue帮助我按照以下步骤解决了该问题。按以下顺序运行以下命令:

  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的{​​{1}}部分中来实现上述步骤的自动化:

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"

答案 6 :(得分:4)

这对我有用,尝试了几种方法。

在文件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__\/.*/
];

希望这会有所帮助。

答案 7 :(得分:3)

您尚未启动捆绑器。在npm start

之前,直接在项目的根目录中运行react-native startreact-native run-android

答案 8 :(得分:3)

显然,没有答案可以解决我的问题。我能够在模拟器上运行react-native应用程序,但是相同的代码(即使在服务器运行时)也使我在设备上运行该应用程序时出现此错误。

我可以通过在终端中执行以下命令来解决该问题:

adb reverse tcp:8081 tcp:8081

答案 9 :(得分:3)

就我而言,模拟器的 Wifi 和移动数据已关闭。

答案 10 :(得分:2)

对我来说,此错误是由于react-native的升级引起的

  

从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/

答案 11 :(得分:2)

我也遇到了这个问题。我解决了以下步骤。

Veritable Veritable中检查android sdk路径。

添加 {strong>系统变量
中的val returnList : List[List[Option[Double]]] = rangeIn.map(r => symbolsIn.map(s => price(s, r))) 系统变量

中的ANDROID_HOME = C:\Users\user_name\AppData\Local\Android\Sdk路径 在下面的代码段中

替换sharedBlacklist

C:\Users\user_name\AppData\Local\Android\Sdk\platform-tools

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

然后运行npx react-native run-android --port 9001

快乐编码..

答案 12 :(得分:2)

如果您正确配置了所有内容,请尝试以下操作:

adb反向tcp:8081 tcp:8081

为什么? “当RN打包程序运行时,您的浏览器中有一个活动的Web服务器,其位置为127.0.0.1:8081。在您进行更改时,正是通过该服务器提供并刷新了应用程序的JS捆绑包。如果没有反向代理,您的电话将无法连接到该地址。”

所有功劳Swingline0 的功劳

答案 13 :(得分:2)

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

答案 14 :(得分:2)

对我有用的解决方案如下:

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

My code example

答案 15 :(得分:2)

在都会黑名单中更新此部分

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

答案 16 :(得分:1)

此错误的可能性也是错误的路径,请检查一次

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

答案 17 :(得分:1)

尝试如果您尝试了上述解决方案中提到的所有步骤,请执行以下步骤:

  1. 在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

  1. 现在运行命令以进行构建,例如react-native run-android

答案 18 :(得分:1)

如果您使用的是Linux,请从App根目录打开终端并运行

npm开始

然后打开另一个终端窗口并运行 反应性本机回避

答案 19 :(得分: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
        ...
    }
    ...
}

当我尝试将build(.apk)上传到goole播放控制台时,在警告后,我不得不将targetSdkVersion从27更改为28。 我几乎没有意识到这是上述错误的根本原因。 @tom和@tinmarfrutos的立即回答是绝对合理的。

我通过在我的android / app / src / debug / AndroidManifest.xml中添加android:usesCleartextTraffic =“ true”来解决了这个问题

答案 20 :(得分:1)

我遇到了同样的麻烦,对我来说,问题是 adb 不在正确的环境路径中,错误告诉您是地铁端口,而在adb中,端口是杀死并重新启动。

添加环境变量(ADB)

  1. 开放环境变量
  2. 从第二帧 PATH变量中选择,然后单击下面的编辑选项
  3. 点击添加选项
  4. 提交sdk平台工具路径C:\ Users \我的用户\ AppData \ Local \ Android \ Sdk \ platform-tools
  

注意:或者取决于adb.exe在计算机中的位置

  1. 保存更改

再次运行android build

$ react-native run-android

$ react-native start

$ react-native run-android

答案 21 :(得分:1)

  1. 就我而言,我只是关闭应用程序表单模拟器

  2. 然后再运行一次

<块引用>

react-native run-android

答案 22 :(得分:0)

我有同样的问题。但是这种方法解决了。 使用转到android文件夹 先按responseEntityJson = objectMapper.writeValueAsString(responseEntity); rootNode = objectMapper.readTree(responseEntityJson); DataValue = rootNode.findValue("Data"); 然后按cd androidgradlew clean进行操作,以适用于您的操作系统。

答案 23 :(得分:0)

我遇到了类似的问题。 npx react-native init创建.gitignore文件,该文件忽略<project>/android/app/src/debug文件夹。如果您以后克隆了该项目,则该文件夹将丢失。 解决方案很简单。以后将此行添加到.gitignore文件的底部。

!android/app/src/debug

对于您当前的项目,请项目创建者提交此文件夹。 我在React Native版本0.63中遇到了这个错误

答案 24 :(得分:0)

像我们大多数人一样,我假设您正在VSCODE上运行。就我而言,我跑了

npx react-native开始

从另一个终端

现在从您的终端在VSCODE中运行npx react-native run-android

答案 25 :(得分:0)

这是我如何解决此问题而又不涉及构建的问题:

1-关闭虚拟设备

2-已在物理设备上测试过-(有效)

3-使用API​​ 30 Android 10+创建了新的虚拟设备

4-在新创建的虚拟设备上重试,所有操作都像超级按钮。

答案 26 :(得分:0)

嘿,两个遮阳篷的组合解决了我的问题。这与港口有关。

adb reverse tcp:8088 tcp:8088
react-native run-android --port=8088

这样做,应用程序可以很好地加载通过USB连接的手机。 我认为我的AV或Vagrant或PC中的其他设备正在使用该端口。

如果需要,您可以将8088更改为其他名称。

享受!

答案 27 :(得分:0)

这是在 android 设备无法访问 Metro 服务器时引起的。如果上述方法不起作用,请检查您的 android 设备是否没有配置代理。 (设置 > 代理 > 无代理)。

答案 28 :(得分:0)

这个错误对我来说无处不在,为我解决的是:

  1. Android Studio 中的 AVD 管理器
  2. 在虚拟设备上的操作下按下箭头
  3. 擦除数据
  4. 重启地铁

答案 29 :(得分:0)

运行以下两条命令

  1. adb kill-server
  2. adb start-server

之后,运行命令 npm start,然后运行 ​​Android Studio 中常用的绿色运行按钮。

答案 30 :(得分:0)

我确定它是这里提到的其他内容的某种组合,例如允许为本地主机启用的明文。但这是难题的最后一部分。

project.ext.react = [
    entryFile: "index.js",

    // ADD THESE THREE

    bundleAssetName: "index.android.bundle",
    bundleInDebug: true,
    bundleInRelease: true
]

RN:0.61.3

答案 31 :(得分:0)

我遇到了同样的问题,按照以下步骤操作后,问题得到解决

  1. 清晰的值班员手表:watchman watch-del-all
  2. 删除node_modules文件夹:rm -rf node_modules && npm install
  3. 重置Metro Bundler缓存:rm -rf /tmp/metro-bundler-cache-*
  4. 删除急速缓存:rm -rf /tmp/haste-map-react-native-packager-*

答案 32 :(得分:0)

我已经尝试了以下所有由不同人评论和回答的解决方案。有时它有效,但有时没有任何解决方案对我有用.....此错误的最佳解决方案从物理设备卸载 APK 并再次运行应用程序...它对我来说 100% 有用!!!

步骤 1-

<块引用>

从物理设备卸载 APK

步骤 2-

<块引用>

转到 Android 文件夹 cd android

步骤 3-

<块引用>

输入命令 Gradlew Clean

步骤 4-

<块引用>

输入 Cd.. 返回项目

步骤 4-

<块引用>

运行命令 npx react-native run-androidreact-native run-android

答案 33 :(得分:0)

我做到了: 反应性开始 和 npx react-native run-android。

但是,对于Min19(基于Ubuntu),在运行之前我一直遇到相同的问题:

echo fs.inotify.max_user_watches=582222 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

发件人: https://reactnative.dev/docs/troubleshooting#content

至少我的手机上运行了该应用程序。

答案 34 :(得分:0)

您还可以将Node js降级到12以下版本,并删除nodemodule,然后再次运行npm install

答案 35 :(得分:0)

对我有用的是:

  1. 关闭所有控制台
  2. 打开新控制台
  3. $ adb devices
  4. 确保仅连接了一个设备
  5. $ react-native run-android

答案 36 :(得分:0)

在某些情况下,您可能想关闭React-native捆绑程序的端口 并以相同的过程重新运行应用程序

1.sudo kill -9 $(sudo lsof -t -i:9001)

2.npm start inside the project

3. react-native run-android

答案 37 :(得分:0)

模拟器上的错误消息有点误导。就我而言,我使用的是Macbook。我需要通过运行$ chmod 755 ./gradlew来更改android / gradlew的权限,然后才能构建该应用并将其部署到android仿真器。

答案 38 :(得分:0)

就我而言,我已经在模拟器中设置了代理。 删除该代理后,它可以恢复正常。

答案 39 :(得分:0)

如果您在Linux OS上运行,则可能会导致npm远程服务器未运行。打开另一个终端(带有项目目录)并运行 sudo npm start sudo react-native start ,然后再执行 sudo react-native run-android >

答案 40 :(得分:0)

我只是因为在模拟器上错误地关闭了Wifi才经历了这种情况。我重新打开了Wifi并开始正常工作。希望对某人有帮助

答案 41 :(得分:0)

此步骤确实对我有帮助:

步骤1:在android / app / src / main / assets中创建目录

Linux命令mkdir android/app/src/main/assets

步骤2:index.android.js重命名为index.js

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

第3步: 建立您的APK:react-native run-android

答案 42 :(得分:0)

我只想添加一种非显而易见的可能性,此处未涉及。我正在使用@react-native-community/netinfo来检测网络变化,主要是网络状态。要测试网络关闭状态,需要关闭(仿真器上的)WIFI开关。这也有效地切断了仿真器和调试环境之间的桥梁。测试后,我没有重新启用WIFI,因为我不在电脑旁,回来后立即忘记了它。

其他人也可能会遇到这种情况,值得在采取任何其他严厉措施之前进行检查。

答案 43 :(得分:0)

默认情况下,名为“ Metro Server”的微型JavaScript服务器在端口8081上运行。

您需要使此端口可用于此服务器启动。因此,

  1. 释放端口
  2. 关闭您的虚拟设备
  3. “ react-native run-android”。

如何释放端口?

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

How to kill the process currently using a port on localhost in windows?

,最重要的是,按照facebook的建议,我将节点版本从8.x升级到了10.x(最新)。 @ https://facebook.github.io/react-native/docs/getting-started

答案 44 :(得分:0)

我对此的解决方法如下:

启动Metro服务器

$ react-native start

启动Android

$ react-native run-android

如果看到错误消息“端口8081已在使用中”,则可以终止该进程并重新运行

$ react-native start

请参见React Native Troubleshooting Page

答案 45 :(得分:0)

尝试以下操作。

  1. 删除Android和IOS文件夹
  2. 运行本机弹出
  3. 运行react-native运行android

也许在前面的步骤之后,您执行了npm start---reset-cache

我工作,希望对您有帮助。

答案 46 :(得分:0)

重要- 您的环境中可能有许多虚拟设备。确保如果要更改AVD,请再次重复设置。

调试信息-

如果遇到上述错误,则必须首先验证端口8081上正在运行什么

在终端中使用以下命令查找内容的最快方法

netstat -aon | findstr 8081

如果显示出某些内容,则表明端口已被阻止。如果可能的话,请将该端口解锁。

否则,您将需要更改端口。 Naveen Kumar在上面的评论中已经提到了这样做的过程

react-native run-android --port = 9001

确保也不使用9001:)

答案 47 :(得分:0)

我发生了类似的问题 显然,Mcafee封锁了8081端口,花了我几个小时才弄清楚这一点

尝试运行react-native run-android --port = 1234

应用在模拟器上显示错误后,进入开发设置(可通过单击crtl + M进行访问)

将“设备的调试服务器主机和端口”更改为“ localhost:1234”

关闭应用程序,然后从应用程序抽屉中启动

希望这对您也有帮助!