错误“在应用程序启动时无法获取BatchedBridge,请确保您的软件包已正确打包”

时间:2016-08-10 10:24:32

标签: android react-native

尝试在Android 4.4.2上创建一个react-native项目我得到了这个错误屏幕

said error

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

33 个答案:

答案 0 :(得分:141)

可能的解决方案是,您很可能不首先捆绑您的应用程序,执行以下步骤,然后将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)

从位置android/app/build/outputs/apk/app-debug.apk

将已创建的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/"
  },

或如提到的卷曲等价物,但对于大多数情况,上面的内容更加健壮

答案 1 :(得分:107)

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

react-native start

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

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

adb reverse tcp:8081 tcp:8081

答案 2 :(得分:27)

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

一旦我这样做,一切顺利。此外,当您在开发菜单中时,请记住选择Enable Live ReloadDebug JS Remotely,这样可以让您在调试时更加轻松。

答案 3 :(得分:22)

这对我有用(在尝试了我找到的所有其他解决方案之后......):

adb reverse tcp:8081 tcp:8081

中运行\Android\sdk\platform-tools

答案 4 :(得分:16)

当我第一次使用物理设备启动React Native时,我也得到了这个。如果是这种情况,您需要在开始之前做一些额外的事情。您必须在“开发设置”中输入有关开发计算机的一些信息。 React Native。

当您看到错误时,摇动您的设备。将弹出一个对话框,最后一个选项将是“开发设置”'。选择' Debug server hot&设备端口'并输入您的本地IP和使用的端口(通常为8081)。

请参阅https://facebook.github.io/react-native/docs/running-on-device-android.html

的最后一段

答案 5 :(得分:7)

如果解决方案都不适合您,请尝试以下方法:

我发现我的<root>/android/app/build/intermediates/assets/debug文件夹是空的,并且通过运行cd android && ./gradlew assembleDebug并没有创建所需的文件,后来我们的本机应用程序中的javascript线程使用这些文件。

我手动运行了以下命令,调试构建命令应该在理想情况下创建。

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我的应用程序又开始工作了。

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

答案 6 :(得分: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

答案 7 :(得分:5)

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

答案 8 :(得分:5)

现在为时已晚,但这对我有用。

  1. react-native run-android
  2. react-native start
  3. 第一个命令将为android构建apk并将其部署在您的设备上(如果已连接)。当您打开应用程序时,它将显示错误的红色屏幕。然后运行第二个命令,它将运行packager并为您构建应用程序包。

答案 9 :(得分:5)

请参阅issue

1.react-native start

2.点击您设备上的Reload(R,R)

答案 10 :(得分:5)

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

adb reverse tcp:8081 tcp:8081

答案 11 :(得分:3)

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

答案 12 :(得分:3)

由于您使用的是Android&lt; 5.0您无法使用默认的SELECT ColumnA FROM Table1 WHERE ColumnA <> ColumnB AND ABS(ColumnA - ColumnB) BETWEEN 0 AND 10 方法,但Facebook已添加official documentation to connect to the development server via Wi-Fi,这将支持您的版本。引用MacOS的说明,但它们也适用于Linux和Windows:

  

方法2:通过Wi-Fi连接

     

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

     

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

     

确保您的笔记本电脑和手机位于同一Wi-Fi网络上。   在您的设备上打开您的React Native应用程序。   你会看到一个错误的红色屏幕。还行吧。以下步骤将解决这个问题。   打开应用内开发者菜单。   转到开发设置→调试服务器主机以获取设备。   键入计算机的IP地址和本地开发服务器的端口(例如10.0.1.1:8081)。   返回Developer菜单并选择Reload JS。

答案 13 :(得分:3)

它有“随机”这个问题,并花了我一些时间来意识到我的场景中出了什么问题。

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

  

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

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

Unable to recognize JS server

由于我在Windows上,我运行netstat并发现我的VLC播放器也在端口8081上运行导致问题。 因此,在我的情况下,如果我在反应原生服务器之前启动vlc服务器它将无法工作。

这个相同的日志消息在以前版本的react-native-cli上没有输出,导致它无声地失败。

TL,DR:检查是否有与包管理器在同一端口上运行的任何内容(默认为8081)

答案 14 :(得分:2)

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

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

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

答案 15 :(得分:1)

对我来说问题是'adb'无法识别 - 请检查this回答。

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

答案 16 :(得分:1)

我的方式是:

react-native start

之后在您的设备中使用:

click to Reload.

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

答案 17 :(得分:1)

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

经过一些研究后,我发现用 react-native init AwesomeProject 启动新项目会更好(在本机文档中设置所有设置)然后运行此命令:

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

它应该工作得很好。至少它对我有用。

答案 18 :(得分:1)

当我们开始对原生项目#1做出反应时,我们大多数人第一次面临这个问题。

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

我使用命令创建了一个示例项目: react-native init ReactProject1

<强>解决方案

修复方法是帮助local-cli \ runAndroid \ adb.js找到adb.exe,方法与local-cli \ runAndroid \ runAndroid.js相同:

在projectname下找到replace语句(无论你给出什么)\ node_modules \ react-native \ local-cli \ runAndroid

<强>替换

const devicesResult = child_process.execSync(&#39; adb devices&#39;);

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

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

答案 19 :(得分:1)

运行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)

之后,问题已得到解决

答案 20 :(得分: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中的开发服务器即可。如果它没有响应,那么这可能就是你所需要的。如果确实有回应,那么这对你没有帮助。

答案 21 :(得分:1)

对我来说,我启用了侧面同步和激活。关闭它会立即使问题消失。可能值得关闭PC和设备之间的这种或任何其他通信

答案 22 :(得分:1)

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

答案 23 :(得分:0)

我发现我还需要添加一个

  

react-native upgrade

让应用程序正常运行。

答案 24 :(得分:0)

我尝试了上面/下面的许多建议,但最终,我遇到的问题是一个带守望者的权限,它是使用早先的自制程序安装的。如果您在尝试使用模拟器时查看终端消息,并且在模拟器上遇到关于守望者的“权限被拒绝”错误以及“无法获取BatchedBridge”消息,请执行以下操作:

转到/Users/<username>/Library/LaunchAgents目录并更改权限设置,以便用户可以读写。这与你是否真的有com.github.facebook.watchman.plist文件无关。

答案 25 :(得分:0)

尝试清理缓存

  

react-native start --reset-cache

答案 26 :(得分:0)

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

Android工作室,我从installDebug/installRelease项目而不是app项目发布了root gradle脚本。

答案 27 :(得分:0)

最简单的方式!

  • 停止服务器并结束项目构建。
  • 打开'Node.js'终端。
    • 使用'react-native'项目导航到文件夹。
    • 键入'react-native start' - 手动启动react本机服务器。
  • 转到您的代码编辑器终端并输入'react-native run-android。

你很高兴!

答案 28 :(得分:0)

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

答案 29 :(得分:0)

“ npm开始”

我刚刚关闭了终端并打开了一个新终端。通过cd命令转到项目位置。然后只需键入-“ npm start”。然后“ r”重新加载。一切都消失了。我认为每个人都应该立即尝试一下。

答案 30 :(得分:0)

请确保将您的App组件导出到index.js。

答案 31 :(得分:0)

有人建议以下一个

react-native运行Android react-native开始--reset-cache,

但就我而言,我只是关闭cli命令提示符窗口并使用以下内容。

npx react-native run-android

效果很好。

答案 32 :(得分:-3)

解决方案: 在“react-native”目录下: 运行命令“./gradlew:示例:UIExplorer:android:app:installDebug”成功后, 成功运行commnad“ ./ packager / packager.sh ”。 然后在模拟器或设备中单击“UIExplorer App”