首页 文章

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

提问于
浏览
154

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

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

30 回答

  • 3

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

    一旦我这样做,一切顺利 . 此外,当你在开发菜单中时,记得选择 Enable Live ReloadDebug JS Remotely ,这会让你的生活变得更容易调试 .

  • 5

    我在设备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 .

  • 4
    • 重启genymotion

    • 运行 react-native run-android

    • 问题解决了

  • 2

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

    \Android\sdk\platform-tools 内运行 adb reverse tcp:8081 tcp:8081

  • 5

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

    react-native start
    

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

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

    adb reverse tcp:8081 tcp:8081
    
  • 0

    只需重新启动系统或完整捆绑包即可解决问题 .

  • 0

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

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

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

  • 3

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

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

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

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

    Unable to recognize JS server

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

    在以前版本的react-native-cli上没有输出相同的日志消息,使其无声地失败 .

    TL, DR: check if there´s anything running on the same port as the package manager (8081 by default)

  • 7

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

    • react-native run-android .

    • react-native start .

    第一个命令将为android构建 apk 并在其连接时将其部署在您的设备上 . 当您打开应用程序时,它将显示错误的红色屏幕 . 然后运行第二个命令,它将运行packager并为您构建应用程序包 .

  • 1

    尝试清理缓存

    react-native start --reset-cache

  • 0

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

    adb reverse tcp:8081 tcp:8081

  • 27

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

    Android studio 开始,我从 app projet而不是 root projet启动 installDebug/installRelease gradle脚本 .

  • 106

    separate 终端中,将设备连接到计算机并运行以下命令:

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

    Application 终端:

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

    我发现我还需要添加一个

    react-native升级

    让应用程序正确运行 .

  • 0

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

    我发现我的 <root>/android/app/build/intermediates/assets/debug 文件夹是空的,并且运行 cd android && ./gradlew assembleDebug 并没有创建所需的文件,后来我们的本机应用程序中的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
    

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

    然后我又跑了 cd android && ./gradlew installDebug 我的应用程序又开始工作了 .

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

  • 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中的开发服务器即可 . 如果它没有响应,那么这可能就是你所需要的 . 如果它确实响应,那么这对你没有帮助 .

  • 0

    我的方式是:

    react-native start
    

    之后在您的设备中使用:

    click to Reload.
    

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

  • 1

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

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

  • 5

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

  • 7

    运行 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)之后问题已得到解决

  • 16

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

    当您看到错误时,请摇动您的设备 . 将弹出一个对话框,最后一个选项将是'Dev Settings' . 选择'Debug server hot & port for device'并输入您的本地IP和使用的端口(通常为8081) .

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

  • 5

    由于您使用的是Android <5.0,因此无法使用默认的 adb reverse 方法,但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 .

  • 1

    Easiest Way!

    • 停止服务器和结束项目构建 .

    • 打开'Node.js'终端 .

    • 导航到'react-native'项目的文件夹 .

    • 键入'react-native start' - 手动启动react本机服务器 .

    • 转到代码编辑器终端并输入'react-native run-android .

    You're good to go!

  • 1

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

  • 22

    issue

    1.react-native start

    2.在设备上单击 Reload(R,R) .

  • 1

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

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

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

    Solution

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

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

    Replace:

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

    By:

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

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

  • 141

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

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

  • 0

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

    如果这可以解决您的问题,请告诉我

    EDIT

    您可以简单地将它作为脚本自动化到您的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

    我有同样的问题 . 当我通过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
    

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

  • 1

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

相关问题