在react-native中调用Appregistry.runApplication时出错

时间:2017-05-02 17:46:39

标签: javascript android reactjs react-native

我正在尝试在Android模拟器上运行react-native应用程序,但我收到类似

的错误
  

调用Appregistry.runApplication

时出错

AVD:' Nexus_5X_API_23(AVD) - 6.0 操作系统:Windows 10

enter image description here

请帮帮忙吗?

13 个答案:

答案 0 :(得分:35)

我几天前遇到了几乎相同的问题。对我来说这是一个真实的设备。

从我的所有研究中,对我有用的解决方案如下:

当您键入react-native run-android启动应用时,会出现错误。

所以,到达包含“adb.exe”的目录(对我来说是C:\ Users \ username \ AppData \ Local \ Android \ Sdk \ platform-tools \)

从这里打开一个终端。然后输入adb reverse tcp:8081 tcp:8081

然后,通过在手机上重新加载应用程序,它应该可以正常工作。

我希望这会对你有所帮助!! (如果没有,对我感到羞耻)

干杯;)

编辑:

我找到了解决此问题的更方便的解决方案。

当您启动“react-native run-android”时,您可能会发表评论说“adb未被识别为内部或外部命令......”

好吧,您可以添加一个导致adb.exe的环境变量,而不是手动使用adb命令。

转到“控制面板”> “系统和安全性”> “系统”> “高级系统设置”。

点击此处,点击“环境变量”。在“系统变量”部分中搜索“路径”变量。单击它并按“编辑”按钮。

您可以在此处添加此变量的新路径。只需单击“新建”按钮并编写adb.exe路径即可。例如C:\ Users \ username \ AppData \ Local \ Android \ Sdk \ platform-tools \

(对于最旧版本的Windows,您必须在内容中添加“; C:\ Users \ username \ AppData \ Local \ Android \ Sdk \ platform-tools \”。)

就是这样,现在adb reverse tcp:8081 tcp:8081命令将在构建时自动运行。

希望这对你更有帮助!

答案 1 :(得分:23)

我有同样的问题,我的解决方法是运行

$ react-native start

在后台然后运行

$ react-native run-android

答案 2 :(得分:17)

据我说这个错误来自:

1)您没有在正确的位置运行打包程序,即,您点击了错误的文件夹以运行react-native packager,因此只需导航到您项目的目录并运行react-native start

2)当您对Appregistry模块进行错误编码时。

3)关闭所有Xcode,打包器,模拟器等,然后重新启动它。

4)从错误中我想到的一件事就是模块的名称

AppRegistry.registerComponent('AppName', () => componentName)

matches with the @"AppName" on your AppDelegate.m on the call for

[[RCTRootView alloc] initWithBundleUrl:...
                            moduleName:@"AppName"
                         launchOptions:...

5)因为我们正在使用react的组件,所以我们需要给出带有大写字母的类名的第一个字符。

6)让我们看看index.android.jsindex.ios.js

中的错误

干杯:)

答案 3 :(得分:2)

我有同样的问题。它发生在McAffee在8081端口和封锁器上。 我的解决方案:

react-native start --port your_port

在android模拟器中,Command + M显示开发菜单,点击"开发设置"然后单击"调试服务器主机和端口"并将其设置为your_ip:your_port。

然后

react-native run-android

答案 4 :(得分:2)

在我的情况下(当然,经过我在这里和其他地方找到的所有内容之后),我意识到我已经在手机上关闭了我的WiFi ......不能那样工作!希望它可以帮助某人

答案 5 :(得分:1)

我有同样的问题,并且能够通过将我的本地计算机设置为android模拟器中的调试服务器来解决它。打开android模拟器,Command + M打开一个菜单,然后单击“开发设置”,然后单击“调试服务器主机和端口”并将其设置为127.0.0.1:8081。然后从项目目录中运行react-native run-android。我希望这会有所帮助。

答案 6 :(得分:1)

最后,我得到了它。我创建了一个新的AVD

  

Nexus6 API 23

。早先我尝试使用 Nexus5x API 23 。谢谢所有

答案 7 :(得分:1)

确保端口8081可用。在我的情况下,我的一个服务是在端口8081(tomcat webserver)上运行。

答案 8 :(得分:0)

我遇到了完全相同的问题(因为这是一个非常通用的消息),但问题不同。在我的情况下,这是一个新创建的项目,模拟器不起作用,但真正的设备确实有效。

我的问题是观察者inotify在默认情况下可以处理的限制,这是一个Linux内核子系统,用于扩展文件系统以注意文件系统的更改,并将这些更改报告给应用程序及其&# 39;广泛使用,包括android studio和反应原生;当我尝试执行react-native run-android时,所有观察者都被分配到我的系统上,导致进程在同一消息上失败。

要更改inotify可以处理的观看者的最大数量,您需要编辑文件sysctl.conf,该文件通常位于/etc/sysctl.conf/etc/sysctl.d/custom_name.conf,并添加以下行:< / p>

 fs.inotify.max_user_watches = 5242881

编写完文件后,您需要执行sysctl -p filename.conf其中&#39; filename.conf&#39;是保存sysctl的.conf文件的路径和名称。一旦应用了更改,一切都应该按预期工作。

答案 9 :(得分:0)

我也有同样的问题。我解决了在真实设备上运行的问题。

正如Jedi先生所说,McAffee阻止了端口8081.所以我修改了Project-Folder&gt; \ node_modules \ react-native \ local-cli \ runAndroid \ runAndroid.js文件的功能

function tryRunAdbReverse(device) {
   try {
     const adbPath = getAdbPath();
     const adbArgs = ['reverse', 'tcp:8081', 'tcp:8081'];

function tryRunAdbReverse(device) {
   try {
     const adbPath = getAdbPath();
     const adbArgs = ['reverse', 'tcp:8081', 'tcp:3040'];

并在

上启动了该应用程序
      react-native start --port 3040

答案 10 :(得分:0)

对我来说,我只需要将平台工具添加到我的Path环境变量中,以便react-native可以启动adb服务器。

我得到了:

'adb' is not recognized as an internal tool or program

要解决此问题,我将以下内容添加到我的Path环境变量中。

C:\Users\<Username>\AppData\Local\Adnroid\sdk\platform-tools

然后运行react-native run-android工作了!

答案 11 :(得分:0)

我知道这个问题得到了很多答案但是,我认为值得添加我的解决方案,希望这可以帮助那些人。

在我的情况下,问题来自我的虚拟机,虽然我没有调查但是通过创建新的虚拟设备,应用程序运行顺利,没有任何问题。

所以只需创建一个新的虚拟设备。 :)

答案 12 :(得分:0)

我为注册表错误搜索了一个星期的解决方案,并尝试了所有这些解决方案,而所缺少的只是我需要在expo下添加我的app.json文件:

    "platforms": [
      "ios",
      "android",
      "web"
    ],

因此,如果其他所有方法均失败,请尝试将其添加到您的博览会中。