试图在Android 4.4.2上创建一个react-native项目我得到了这个错误屏幕
并且找不到任何解决方法 . 我尝试重新启动打包器,重新连接设备,甚至重新安装反应原生和启动新项目 . 在6.0.0及更高版本上,它工作得很好 .
刚收到这个错误 . 这是我要修复的内容:我选择了 Dismiss ,进入开发人员菜单,然后 Dev Settings ,选择 Debug server host & port for device ,我添加了我的计算机IP地址和端口: 192.168.0.xx:8xxx ,使用开发机器分配的IP地址在您的wifi网络上 . 端口通常 :8081
Dismiss
Dev Settings
Debug server host & port for device
192.168.0.xx:8xxx
:8081
一旦我这样做,一切顺利 . 此外,当你在开发菜单中时,记得选择 Enable Live Reload 和 Debug JS Remotely ,这会让你的生活变得更容易调试 .
Enable Live Reload
Debug JS Remotely
我在设备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 .
重启genymotion
运行 react-native run-android
react-native run-android
问题解决了
这对我有用(在尝试了我找到的所有其他解决方案之后......):
在 \Android\sdk\platform-tools 内运行 adb reverse tcp:8081 tcp:8081
\Android\sdk\platform-tools
adb reverse tcp:8081 tcp:8081
我也遇到过这个问题 . 我做的是强行杀死我的设备上的应用程序,然后我打开另一个控制台并运行
react-native start
然后我再次从我的设备打开应用程序,它又开始工作了 .
编辑:如果您通过USB使用Android设备并拔掉它或您的计算机进入睡眠状态,您可能必须先运行
只需重新启动系统或完整捆绑包即可解决问题 .
我的问题是我浏览了我的 AndroidManifest.xml 文件并删除了该行
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
因为我的应用程序不需要互联网 . 但是,react本机调试应用程序确实需要Internet访问(访问打包器)Whoops . :)
它有“随机”这个问题,并花了我一些时间才意识到我的场景中出了什么问题 .
在我更新到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)
现在为时已晚,但这对我有用 .
react-native run-android .
react-native start .
第一个命令将为android构建 apk 并在其连接时将其部署在您的设备上 . 当您打开应用程序时,它将显示错误的红色屏幕 . 然后运行第二个命令,它将运行packager并为您构建应用程序包 .
apk
尝试清理缓存
react-native start --reset-cache
在终端中尝试此命令,然后重新加载 . 它对我有用
adb reverse tcp:8081 tcp:8081
我遇到了同样的问题,但这是我自己的一个愚蠢的错误......
从 Android studio 开始,我从 app projet而不是 root projet启动 installDebug/installRelease gradle脚本 .
app
root
installDebug/installRelease
在 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
我发现我还需要添加一个
react-native升级
让应用程序正确运行 .
如果解决方案都不适合您,请尝试以下方法:
我发现我的 <root>/android/app/build/intermediates/assets/debug 文件夹是空的,并且运行 cd android && ./gradlew assembleDebug 并没有创建所需的文件,后来我们的本机应用程序中的javascript线程使用了这些文件 .
<root>/android/app/build/intermediates/assets/debug
cd android && ./gradlew assembleDebug
我手动运行了以下命令,其中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 我的应用程序又开始工作了 .
cd android && ./gradlew installDebug
将调试更多,并将更新实际失败的内容 .
我最终不得不打开我正在使用的端口(默认为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中的开发服务器即可 . 如果它没有响应,那么这可能就是你所需要的 . 如果它确实响应,那么这对你没有帮助 .
我的方式是:
之后在您的设备中使用:
click to Reload.
在控制台react-native中查看,它将获取js包数据 .
对我来说问题是'adb'无法识别 - 检查this答案 .
要解决此问题,请将C:\ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools添加到环境变量
对我来说,这是因为 adb 不在 PATH 中 . 它的位置 /Users/man/Library/Android/sdk/platform-tools 对我来说,它可能是你的其他地方,但无论如何,找到它并将其添加到你的路径,看看是否有帮助 .
adb
PATH
/Users/man/Library/Android/sdk/platform-tools
运行 react-native run-android 时请检查是否有以下错误: adb server version (XX) doesn't match this client (XX); killing...
adb server version (XX) doesn't match this client (XX); killing...
在这种情况下,请确保 /usr/local/opt/android-sdk/platform-tools/adb 和 /usr/local/bin/adb 指向相同的 adb
/usr/local/opt/android-sdk/platform-tools/adb
/usr/local/bin/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
/usr/local/Caskroom/android-platform-tools/26.0.2/platform-tools/adb
并且在他们两个都指向 /Users/sd/Library/Android/sdk/platform-tools/adb (Android SDK)之后问题已得到解决
当我第一次使用物理设备启动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的最后一段
由于您使用的是Android <5.0,因此无法使用默认的 adb reverse 方法,但Facebook已添加official documentation to connect to the development server via Wi-Fi,这将支持您的版本 . 引用MacOS的说明,但它们也适用于Linux和Windows:
adb reverse
方法2:通过Wi-Fi连接您还可以通过Wi-Fi连接到开发服务器 . 您首先需要使用USB电缆在设备上安装应用程序,但一旦完成,您可以按照这些说明进行无线调试 . 在继续之前,您需要开发机器的当前IP地址 . 您可以在系统偏好设置→网络中找到IP地址 . 确保您的笔记本电脑和手机位于同一Wi-Fi网络上 . 在您的设备上打开您的React Native应用程序 . 你会看到一个错误的红色屏幕 . 还行吧 . 以下步骤将解决这个问题 . 打开应用内开发者菜单 . 转到开发设置→调试服务器主机以获取设备 . 键入计算机的IP地址和本地开发服务器的端口(例如10.0.1.1:8081) . 返回Developer菜单并选择Reload JS .
Easiest Way!
停止服务器和结束项目构建 .
打开'Node.js'终端 .
导航到'react-native'项目的文件夹 .
键入'react-native start' - 手动启动react本机服务器 .
转到代码编辑器终端并输入'react-native run-android .
You're good to go!
我也得到了这个错误,真的很困惑 . 因为所有答案都不起作用 . 在将 adb 添加到路径之后 .
见issue:
1.react-native start
2.在设备上单击 Reload(R,R) .
Reload(R,R)
当我们开始对原生项目#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 . (获得成功)
我尝试了上面/下面的许多建议,但最终,我遇到的问题是一个带守望者的权限,它是使用早先的自制程序安装的 . 如果您在尝试使用模拟器时查看终端消息,并且在模拟器上遇到与“守望者”相关的“权限被拒绝”错误以及“无法获取BatchedBridge”消息,请执行以下操作:
转到 /Users/<username>/Library/LaunchAgents 目录并更改权限设置,以便用户可以读写 . 这与你是否真的有一个 com.github.facebook.watchman.plist 文件无关 .
/Users/<username>/Library/LaunchAgents
com.github.facebook.watchman.plist
一个可能的解决方案是您很可能不首先捆绑您的应用程序,执行以下步骤,然后将您的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 不存在则创建它)
assets
然后从项目根目录运行
$> (cd android/ && ./gradlew assembleDebug)
从位置安装创建的apk到您的设备: android/app/build/outputs/apk/app-debug.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/" },
或者如所提到的卷曲等效物,但对于大多数情况,上述情况更为稳健
我有同样的问题 . 当我通过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不显示警告)
应用程序在您的虚拟/真实设备上运行所需要做的就是:
它应该工作得很好 . 至少它对我有用 .
对我来说,我启用了侧面同步和活动 . 关闭它会立即使问题消失 . 在PC和设备之间关闭此通信或任何其他通信可能是值得的
30 回答
刚收到这个错误 . 这是我要修复的内容:我选择了
Dismiss
,进入开发人员菜单,然后Dev Settings
,选择Debug server host & port for device
,我添加了我的计算机IP地址和端口:192.168.0.xx:8xxx
,使用开发机器分配的IP地址在您的wifi网络上 . 端口通常:8081
一旦我这样做,一切顺利 . 此外,当你在开发菜单中时,记得选择
Enable Live Reload
和Debug JS Remotely
,这会让你的生活变得更容易调试 .我在设备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 .
重启genymotion
运行
react-native run-android
问题解决了
这对我有用(在尝试了我找到的所有其他解决方案之后......):
在
\Android\sdk\platform-tools
内运行adb reverse tcp:8081 tcp:8081
我也遇到过这个问题 . 我做的是强行杀死我的设备上的应用程序,然后我打开另一个控制台并运行
然后我再次从我的设备打开应用程序,它又开始工作了 .
编辑:如果您通过USB使用Android设备并拔掉它或您的计算机进入睡眠状态,您可能必须先运行
只需重新启动系统或完整捆绑包即可解决问题 .
我的问题是我浏览了我的
AndroidManifest.xml
文件并删除了该行<uses-permission android:name="android.permission.INTERNET" />
因为我的应用程序不需要互联网 . 但是,react本机调试应用程序确实需要Internet访问(访问打包器)Whoops . :)
它有“随机”这个问题,并花了我一些时间才意识到我的场景中出了什么问题 .
在我更新到React-native-cli 2.0.1后,有一条消息输出到日志,帮助我挖掘并找到根本原因:
在研究了一些链接后,我发现了这个:
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)
现在为时已晚,但这对我有用 .
react-native run-android
.react-native start
.第一个命令将为android构建
apk
并在其连接时将其部署在您的设备上 . 当您打开应用程序时,它将显示错误的红色屏幕 . 然后运行第二个命令,它将运行packager并为您构建应用程序包 .尝试清理缓存
在终端中尝试此命令,然后重新加载 . 它对我有用
adb reverse tcp:8081 tcp:8081
我遇到了同样的问题,但这是我自己的一个愚蠢的错误......
从 Android studio 开始,我从
app
projet而不是root
projet启动installDebug/installRelease
gradle脚本 .在 separate 终端中,将设备连接到计算机并运行以下命令:
Application 终端:
我发现我还需要添加一个
让应用程序正确运行 .
如果解决方案都不适合您,请尝试以下方法:
我发现我的
<root>/android/app/build/intermediates/assets/debug
文件夹是空的,并且运行cd android && ./gradlew assembleDebug
并没有创建所需的文件,后来我们的本机应用程序中的javascript线程使用了这些文件 .我手动运行了以下命令,其中debug build命令应该理想地创建 .
运行这些命令后,我在这个目录中找到了两个bundle文件
<root>/android/app/build/intermediates/assets/debug
然后我又跑了
cd android && ./gradlew installDebug
我的应用程序又开始工作了 .将调试更多,并将更新实际失败的内容 .
我最终不得不打开我正在使用的端口(默认为8081) . 在Linux上,您可以执行以下操作
您可以测试是否确实需要这样做 . 只需在Android设备上导航到Chrome中的开发服务器即可 . 如果它没有响应,那么这可能就是你所需要的 . 如果它确实响应,那么这对你没有帮助 .
我的方式是:
之后在您的设备中使用:
在控制台react-native中查看,它将获取js包数据 .
对我来说问题是'adb'无法识别 - 检查this答案 .
要解决此问题,请将C:\ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools添加到环境变量
对我来说,这是因为
adb
不在PATH
中 . 它的位置/Users/man/Library/Android/sdk/platform-tools
对我来说,它可能是你的其他地方,但无论如何,找到它并将其添加到你的路径,看看是否有帮助 .运行
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)之后问题已得到解决当我第一次使用物理设备启动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的最后一段
由于您使用的是Android <5.0,因此无法使用默认的
adb reverse
方法,但Facebook已添加official documentation to connect to the development server via Wi-Fi,这将支持您的版本 . 引用MacOS的说明,但它们也适用于Linux和Windows:Easiest Way!
停止服务器和结束项目构建 .
打开'Node.js'终端 .
导航到'react-native'项目的文件夹 .
键入'react-native start' - 手动启动react本机服务器 .
转到代码编辑器终端并输入'react-native run-android .
You're good to go!
我也得到了这个错误,真的很困惑 . 因为所有答案都不起作用 . 在将 adb 添加到路径之后 .
见issue:
1.react-native start
2.在设备上单击
Reload(R,R)
.当我们开始对原生项目#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 . (获得成功)
我尝试了上面/下面的许多建议,但最终,我遇到的问题是一个带守望者的权限,它是使用早先的自制程序安装的 . 如果您在尝试使用模拟器时查看终端消息,并且在模拟器上遇到与“守望者”相关的“权限被拒绝”错误以及“无法获取BatchedBridge”消息,请执行以下操作:
转到
/Users/<username>/Library/LaunchAgents
目录并更改权限设置,以便用户可以读写 . 这与你是否真的有一个com.github.facebook.watchman.plist
文件无关 .一个可能的解决方案是您很可能不首先捆绑您的应用程序,执行以下步骤,然后将您的app-debug.apk部署到您的设备
(如果文件夹
assets
不存在则创建它)然后从项目根目录运行
从位置安装创建的apk到您的设备:
android/app/build/outputs/apk/app-debug.apk
如果这可以解决您的问题,请告诉我
EDIT :
您可以简单地将它作为脚本自动化到您的package.json中,我相信它将在即将发布的react-native版本中修复,并将在组装最终APK之前执行,因此不需要(我希望以及)
放:
或者如所提到的卷曲等效物,但对于大多数情况,上述情况更为稳健
我有同样的问题 . 当我通过create-react-native-app AwesomeProject创建一个反应原生项目时,它在手机上的Expo应用程序中运行良好 . 之后,我想使用该快速启动项目来开发我的项目并得到与您相同的错误 .
后一些研究我发现最好用react-native init AwesomeProject启动新项目(在本机文档中设置所有设置)然后运行以下命令:
这应该用bundle修复东西(--dev false不显示警告)
应用程序在您的虚拟/真实设备上运行所需要做的就是:
它应该工作得很好 . 至少它对我有用 .
对我来说,我启用了侧面同步和活动 . 关闭它会立即使问题消失 . 在PC和设备之间关闭此通信或任何其他通信可能是值得的