应用程序启动时出现错误“无法获取BatchedBridge,请确保您的捆绑包包装正确”


167

尝试在Android 4.4.2上创建react-native项目时出现此错误屏幕

说的错误

并且找不到任何解决方法。我尝试重新启动打包程序,重新连接设备,甚至重新安装react native并启动新项目。在6.0.0及更高版本上,它可以正常工作。


1
执行后是否收到此错误react-native run-android?在这种情况下,我遇到了奇怪的错误,因为在调试模式下,不需要JS bundle afaik,因为它应该连接到软件包服务器。
Ryan H.

我在这里发布了对相同问题的答案:stackoverflow.com/a/45110063/706798
Anton

我收到相同的错误消息,但适用于iOS。有人有建议吗?我尝试运行“ react-native run-ios”,但是它不起作用,因为XCode在我的外部驱动器上。
ryanwebjackson

Answers:


145

一个可能的解决方案是,您很可能不首先捆绑应用程序,执行以下步骤,然后将app-debug.apk部署到设备上

$ cd myproject  
$ react-native start > /dev/null 2>&1 &  
$ curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

(如果该文件夹assets不存在,请创建它)

然后从项目根目录运行

$> (cd android/ && ./gradlew assembleDebug)

从以下位置将创建的apk安装到您的设备: android/app/build/outputs/apk/app-debug.apk

让我知道是否可以解决您的问题

编辑

您可以将其作为脚本自动化将其放到package.json中,我相信它将在即将发布的react-native版本中得到修复,并将在组装最终APK之前执行,因此不需要(我希望以及

放置:

"scripts": {
    "build": "(cd android/ && ./gradlew assembleDebug)",
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "bundle-android": "react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --sourcemap-output android/app/src/main/assets/index.android.map --assets-dest android/app/src/main/res/"
  },

或如前所述,但在大多数情况下,上面的方法更健壮


4
是的,它有效!!!我刚才做了什么?为什么卷曲?另外,这可以自动化吗?
Zygro,

非常感谢,因为我的应用程序未链接React本机包。
GeekHades

3
这似乎是hack。如果将JavaScript打包到一个文件中,在开发过程中运行应用程序时是否不会获得实时重新加载功能?
Liron Yahdav '16

2
这不是用于开发,而是用于实际的APK打包
tbo

我什么也没有发生,但仍然出现错误:-com.facebook.react.devsupport.JSException:无法获取BatchedBridge,请确保您的软件包正确包装
Dinesh R Rajput

110

我也遇到了这个问题。我所做的就是强行杀死设备上的应用程序,然后打开另一个控制台并运行

react-native start

然后我从设备上再次打开该应用,它又开始工作了。

编辑:如果您正在通过USB使用android设备并拔掉它,或者您的计算机进入了睡眠状态,则可能必须先运行

adb reverse tcp:8081 tcp:8081

5
这解决了我在使用时的问题react-native run-androidreact-native start当我在工作时,从来不需要使用react-native run-ios
Dylan Pierce

2
这行得通,但是为什么会这样呢?这会解决吗?我必须始终打开2个终端,然后在可以在设备上运行它之前先执行“启动”吗?
Marko

它也对我有用!花了几个小时找到解决方案
dtjmsy

adb reverse tcp:8081 tcp:8081对我来说本身就足够了。非常感谢!
Darius

这是真棒后,你可以做./adb安装
法里斯Rayhan的

27

刚收到此错误。这是我要解决的问题:选择Dismiss,进入“开发人员”菜单,然后Dev Settings选择Debug server host & port for device,我添加了计算机的IP地址和端口:192.168.0.xx:8xxx,并使用您的wifi网络上分配了IP地址的任何开发人员机器。该端口通常是:8081

一旦我做完了,一切就顺利了。另外,在开发菜单中时,请记住选择Enable Live ReloadDebug JS Remotely,这使调试时的工作变得轻松得多。


作品!对于ubuntu用户:运行ifconfig,然后找到inet addr:xxx.xxx.xxx.xxx,其中xxx *是您的开发人员机器ip
henggana


谢谢!仅在调试时不使用USB电缆(使用WiFi ADB之类的工具)时,才需要执行此配置。
Fidan Hakaj '16

4
请务必注意,您可以通过物理摇动android设备来设置@cube引用的Developer菜单。这可能看起来很奇怪,但这就是要提出来的原因。然后按照其余说明进行操作。这为我解决了。
flyace

22

这就是对我有用的方法(尝试了所有其他解决方案之后……):

adb reverse tcp:8081 tcp:8081在里面跑\Android\sdk\platform-tools


1
可以在任何地方运行此命令,而
无需

1
我发现react-native run-android尝试运行该命令,并且依赖于Windows环境变量path来包含platform-tools路径。
straya 2013年

1
谢谢你,这个工作。PATH为C:\ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools
chazefate

不,在Windows 10和Android模拟器上不起作用
像素

16

当我第一次使用物理设备开始使用React Native时,我也得到了这个。在这种情况下,您需要做一些额外的事情才能上手。您必须在React Native的“开发设置”中输入有关您的开发机器的一些信息。

看到错误时,请摇动设备。将会弹出一个对话框,最后一个选项是“ Dev Settings”。选择“调试设备的服务器热和端口”,然后输入您的本地IP和使用的端口(通常为8081)。

请参阅https://facebook.github.io/react-native/docs/running-on-device-android.html的最后一段


这实际上是我上面(八月份)所说的重复,逐字记录
立方,

3
我不知道我需要摇晃设备。首先,我将其发布为评论,但是我没有足够的观点来做到这一点。我确实赞了你的帖子。
Richh94 '16

最简单,最干净的解决方案。谢谢!
callOfCode

7

如果没有适合您的解决方案,请尝试以下操作:

我发现我的<root>/android/app/build/intermediates/assets/debug文件夹为空,运行cd android && ./gradlew assembleDebug时未创建所需的文件,这些文件随后由我们的react native应用程序中的javascript线程使用。

我手动运行了以下命令,该命令应该是debug build命令理想地创建的。

node node_modules/react-native/local-cli/cli.js bundle --platform android --dev true --reset-cache --entry-file index.android.js --bundle-output /<path to dir>/android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest /<path to dir>/android/app/build/intermediates/res/merged/debug

运行这些命令后,我在此目录中找到了两个捆绑文件 <root>/android/app/build/intermediates/assets/debug

然后,我再次运行,cd android && ./gradlew installDebug我的应用再次开始工作。

将会调试更多,并将实际更新失败的内容。


只是为了澄清正在发生的事情,似乎在将react native集成到现有项目中时,bundle输出路径不会自动设置,因此您必须自己进行设置。因此,束输出path = / path / to / assets?
robsstackoverflow

你是最好的顺便说一句。
robsstackoverflow

7

单独的终端中,将设备连接到计算机,然后运行以下命令:

react-native start 
cd user/Library/Android/sdk/platform-tools/
./adb reverse tcp:8081 tcp:8081

应用终端:

react-native run-android 
install apk on your device from this location android/app/build/outputs/apk/app-debug.apk

1
也许您可以扩展答案,以更详细地说明答案中各个步骤的含义,应从哪个目录运行命令等?我认为这将使您的答案更有帮助。
尼尔斯

这是正确的答案。这样,您可以通过连接到react native服务器来快速进行迭代,而不必每次更改都重新打包捆绑软件。
约书亚·品特

6

还为时不晚,但这确实对我有用。

  1. react-native run-android
  2. react-native start

apk如果已连接,则第一个命令将为android 构建并部署到您的设备上。当您打开应用程序时,它将显示红色屏幕并显示错误。然后运行第二个命令,它将运行打包程序并为您构建应用程序捆绑包。


5

在终端中尝试此命令,然后重新加载。对我有用

亚行反向tcp:8081 tcp:8081



5
  1. 重新启动genymotion
  2. react-native run-android
  3. 问题解决了

真的?restart the genymotion?田鼠
Michal

这就像说“哦,您的网站无法正常工作?请尝试重新启动服务器”。
Michal

4

我在Z3 Compact D5803设备上遇到了相同的例外-6.0.1

我去打开.buckconfig文件并更改了这一行:

target = Google Inc.:Google APIs:23

target = Google Inc.:Google APIs:24

因为我在SDK Manager中看到Android 6.X具有api级别24。


3

对我来说,是因为adb不在其中PATH。它是 /Users/man/Library/Android/sdk/platform-tools为我找到的,可能在其他地方,但是无论如何,找到它并将其添加到您的路径中以查看是否有帮助。


3

由于您使用的是Android <5.0,因此无法使用默认adb reverse方法,但是Facebook添加了正式文档以通过支持您的版本的Wi-Fi连接到开发服务器。引用MacOS的说明,但它们也适用于Linux和Windows:

方法2:通过Wi-Fi连接

您也可以通过Wi-Fi连接到开发服务器。首先,您需要使用USB电缆在您的设备上安装该应用,但是一旦完成,您就可以按照以下说明进行无线调试。在继续操作之前,您将需要开发计算机的当前IP地址。

您可以在系统偏好设置→网络中找到IP地址。

确保您的笔记本电脑和手机位于同一Wi-Fi网络上。在设备上打开您的React Native应用程序。您会看到一个红色屏幕,并显示一个错误。还行吧。以下步骤将解决此问题。开启应用程式内开发人员选单。转到开发设置→调试设备的服务器主机。输入机器的IP地址和本地开发服务器的端口(例如10.0.1.1:8081)。返回到“开发人员”菜单,然后选择“重新加载JS”。


3

它“随机”地遇到了这个问题,花了我一些时间才意识到我的情况出了什么问题。

在我更新到React-native-cli 2.0.1之后,有一条消息输出到日志,这有助于我挖掘并找到根本原因:

无法识别JS服务器,继续构建...

在研究了一些链接之后,我发现了一个链接:

无法识别JS服务器

由于我在Windows上,因此我运行netstat并发现我的VLC播放器也在端口8081上运行,从而导致了问题。因此,就我而言,如果我在本机服务器之前启动vlc服务器,它将无法正常工作。

在以前版本的react-native-cli上未输出相同的日志消息,从而使其静默失败。

TL,DR:检查程序包管理器是否在同一端口上运行(默认为8081)


2

我的问题是我浏览了AndroidManifest.xml文件并删除了该行

<uses-permission android:name="android.permission.INTERNET" />

因为我的应用程序不需要互联网。但是,react native调试应用程序确实需要Internet访问(才能访问打包程序)。:)


1
伙计,您救了我的一天。正在扯掉我的头发:)
Christophe Cadilhac


2

运行时,请检查是否有以下错误react-native run-android adb server version (XX) doesn't match this client (XX); killing...

在这种情况下,请确保/usr/local/opt/android-sdk/platform-tools/adb/usr/local/bin/adb指向相同adb

在我的情况下,一个指向/Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK),另一个指向/usr/local/Caskroom/android-platform-tools/26.0.2/platform-tools/adb(Homebrew)

他们都指向/Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK)之后,问题已得到修复


1

我也收到了这个错误,真的很困惑。因为所有答案都不起作用。在将adb添加到路径之后。


1

对我来说,我启用了并同步功能。立即关闭它可以解决问题。可能需要关闭PC或设备之间的此通信或任何其他通信


1

我最终不得不打开我正在使用的端口(默认为8081)。在Linux上,您可以执行以下操作

sudo iptables -A INPUT -p tcp --dport 8081 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 8081 -m conntrack --ctstate ESTABLISHED -j ACCEPT

您可以测试一下是否确实需要执行此操作。只需在Android设备上的Chrome中导航到您的开发服务器即可。如果它没有响应,则可能正是您所需要的。如果它确实响应,那么这将对您没有帮助。


1

我的方式是:

react-native start

之后,在您的设备中使用:

click to Reload.

在控制台中看到react-native,它将获取js bundle数据。


这是我的问题,因为终端没有启动。谢谢 !
Nicolas Leucci

1

我有同样的问题。当我确实通过create-react-native-app AwesomeProject创建了一个react native项目时,它在手机上的Expo应用程序中运行良好。之后,我想使用该快速入门项目来开发我的项目,并且遇到与您相同的错误。

经过研究后,我发现最好使用react-native init AwesomeProject开始新项目(所有设置都在react native文档中),然后运行以下命令:

react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/

那应该用bundle解决问题(--dev false不显示警告)

要让应用程序在虚拟/真实设备上运行,您需要做的就是:

react-native run-android

它应该工作正常。至少对我有用。


1

对我来说,问题是'adb'无法识别-检查答案。

要解决此问题,请在环境变量中添加C:\ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools


这无非是评论。但是,如果您在此处粘贴链接的答案的最后一行,则该答案将变为有效答案。否则,这个答案很可能会被删除。
阿米特·乔希

1

当我们开始响应本机项目#1时,我们大多数人第一次遇到此问题。

几个简单的步骤解决了我的问题:

我使用命令创建了一个示例项目:

react-native init ReactProject1

解决方法是帮助local-cli\runAndroid\adb.js找到adb.exe,方法一样local-cli\runAndroid\runAndroid.js

在项目名称下查找替换语句(无论您输入的是什么)\node_modules\react-native\local-cli\runAndroid

更换:

const devicesResult = child_process.execSync('adb devices');

通过:

const devicesResult = child_process.execSync( (process.env.ANDROID_HOME ? process.env.ANDROID_HOME + '/platform-tools/' : '') + 'adb devices');

完成上述替换后,只需在cmd中运行react-native run-android,它将捆绑apk并首先尝试在您的设备中本地安装js捆绑包。(获得成功)


0

我尝试了上面/下面的许多建议,但最终,我遇到的问题是看守的权限问题,该看守是使用较早版本的自制软件安装的。如果您在尝试使用模拟器时查看终端消息,并且在模拟器上遇到有关守卫的“权限被拒绝”错误以及此“无法获取BatchedBridge”消息,请执行以下操作:

转到/Users/<username>/Library/LaunchAgents目录并更改权限设置,以便用户可以读取和写入。这与您是否实际com.github.facebook.watchman.plist在其中有文件无关。


0

我发现我还需要添加一个

反应性升级

使应用程序正确运行。


0

我遇到了同样的问题,但这是我自己的愚蠢错误。

Android Studio中,我installDebug/installReleaseappprojet而不是rootprojet 启动gradle脚本。


0

最简单的方法!

  • 停止服务器并结束项目构建。
  • 打开一个“ Node.js”终端。
    • 导航到带有“ react-native”项目的文件夹。
    • 输入'react-native start'-手动启动react native服务器。
  • 转到您的代码编辑器终端,然后输入“ react-native run-android”。

你很好!


0

只需重新启动系统或完整的捆绑软件,问题就可以得到解决。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.