React-native Android:调用 AppRegistry.runApplication 时出错
Posted
技术标签:
【中文标题】React-native Android:调用 AppRegistry.runApplication 时出错【英文标题】:React-native Android: Error calling AppRegistry.runApplication 【发布时间】:2017-10-02 06:21:02 【问题描述】:我真的不知道这里发生了什么。 我设置了一个基本应用程序并使用了here 找到的代码共享方法。 这都是非常基本的,所以这里是代码:
// index.android.js
// index.ios.js
import React, AppRegistry from 'react-native';
import CompetitionAgent from './app/index';
AppRegistry.registerComponent('CompetitionAgent', () => CompetitionAgent);
还有组件:
//./app/index.js
import React, Component from 'react';
import
StyleSheet,
Text,
TextInput,
View
from 'react-native';
export default class CompetitionAgent extends Component
constructor()
super();
this.state = nickname:'';
render()
return (
<View style=styles.container>
<View style=styles.information>
<Text style=styles.welcome>
Welcome to the Competition Agent Connect app!
</Text>
<Text style=styles.instructions>
When you are near a Competition Agent, you can join the session.
</Text>
</View>
<View style=padding:10>
<TextInput style=styles.inputStyle />
</View>
</View>
);
const styles = StyleSheet.create(
container:
flex: 1,
justifyContent: 'center',
,
information:
alignItems: 'center',
backgroundColor: '#F5FCFF',
,
welcome:
fontSize: 20,
textAlign: 'center',
margin: 10,
,
instructions:
textAlign: 'center',
color: '#333333',
marginBottom: 5,
,
inputStyle:
flexDirection: 'row',
backgroundColor: '#3E3134',
color: '#FFFFFF',
);
我知道错误可能有很多。所以这个基本布局会产生同样的错误。
import React, Component from 'react';
import
StyleSheet,
Text,
TextInput,
View
from 'react-native';
export default class CompetitionAgent extends Component
constructor()
super();
this.state = nickname:'';
render()
return (
<View style=styles.container>
<Text style=styles.information>
Welcome to the Competition Agent Connect app!
</Text>
</View>
);
const styles = StyleSheet.create(
container:
flex: 1,
justifyContent: 'center',
,
information:
alignItems: 'center',
backgroundColor: '#F5FCFF',
);
堆栈跟踪:
E/unknown:React: Exception in native call
java.lang.RuntimeException: Error calling AppRegistry.runApplication
at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
at android.os.Looper.loop(Looper.java:158)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:208)
at java.lang.Thread.run(Thread.java:818)
Caused by: com.facebook.jni.CppException: Could not get BatchedBridge, make sure your bundle is packaged correctly
at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
at android.os.Looper.loop(Looper.java:158)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:208)
at java.lang.Thread.run(Thread.java:818)
昨天运行良好,重启 Android Studio 也没有帮助。
【问题讨论】:
【参考方案1】:我最近在 Genymotion 模拟器中运行第二个 React Native 项目时遇到了同样的问题,我得到了红屏并显示错误提示:
调用 AppRegistry.runApplication 时出错
但是,就我而言,这不是由于缺少这些环境变量引起的,因为我在一开始就添加了它们。 adb reverse tcp:8081 tcp:8081
命令对我也不起作用。我尝试了几乎所有可以在 Internet 上找到的解决方案,但都没有奏效。
在我的情况下,解决方案是设置Debug Server主机和端口,如下图:
按CTRL + M
,打开设置覆盖
点击“Dev Settings”,进入设置菜单
点击“Debug Server host & port for device”,然后在弹出窗口中输入localhost:8081
现在你可以重新加载它,它应该开始工作了。
希望这个解决方案可以帮助一些人。
背景:
实际上,在 Windows 7 Pro 上设置我的开发环境后,当我运行我的第一个 React Native 应用程序时,我收到一条错误消息:
无法从资产“index.android.bundle”加载脚本。确保 您的捆绑包已正确打包,或者您正在运行一个包 服务器。
为了解决这个问题,我将 Debug Server 选项设置为 localhost:8081,我希望该设置会在虚拟设备上全局生效。但它似乎对每个应用程序都有效,这意味着我必须为新的 React Native 项目一遍又一遍地设置它。
我还在 Windows 10 Home 上设置了环境(遵循与在 Windows 7 Pro 上完全相同的程序),无需设置调试服务器选项,它不会给我这样的错误,我可以运行任何React Native 项目而不进行任何设置。
【讨论】:
需要注意的是localhost:8081
是模拟器设置,<ip-address>:8081
是Wi-Fi设备设置;)
这可能就是adb reverse tcp:8081 tcp:8081
没有为你改变任何东西的原因,因为如果你在模拟器上运行,没有什么可以逆转的,因为模拟器已经指向本地主机
是的,我使用 Genymotion 而不是真正的 Android 设备。感谢您指出这一点。【参考方案2】:
我遇到了类似的问题。尝试让它在设备上运行时,我会收到此错误。它在我电脑上的模拟器上运行良好。
问题是当我执行adb devices
或react-native run-android
时,我会得到“ADB 未被识别为内部或外部命令”。
所以我的解决方法是将 adb.exe 的父目录的路径添加到我的环境变量中,然后重新启动我的命令提示符。在我这样做之后,adb devices
不会抛出“无法识别的内部外部废话”,它会列出我的设备。然后我运行react-native run-android
并在启动时不再出现红屏显示完全无用的错误消息Error calling AppRegistry.runApplication
! :)
所以我发现 ADB 位于我的文件夹中:
C:\Users\Noitidart\AppData\Local\Android\sdk\platform-tools\adb.exe
我使用的是 Windows 10 系统。 Noitidart 是我的计算机用户名。
所以我去了系统环境变量然后找到“路径”然后单击“编辑”,然后单击“新建”并添加到“C:\Users\Mercurius\AppData\Local\Android\sdk\platform-tools”。这是截图:
【讨论】:
非常有帮助,谢谢。但是,我的路径设置正确,否则我无法从一开始就部署到我的设备:) 非常感谢@DerpyNerd 的友好评论和+1 :)【参考方案3】:当我为
设置正确的路径时,它对我有帮助ANDROID_HOME = C:\Users\username\AppData\Local\Android\sdk
和工具:
%ANDROID_HOME%\build-tools
%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\tools
【讨论】:
这是有用的信息,但您是否收到相同的错误消息?这似乎很奇怪,因为这个错误只在我运行我的应用程序时出现。这意味着该应用程序过去已成功构建和捆绑。如果没有正确链接 SDK 和工具,您就无法成功构建,还是我错了? 我有一个“BUILD SUCCESSFUL”消息,虽然也有“java.lang.RuntimeException: Error calling AppRegistry.runApplication”当我正确设置路径时它已经消失了。顺便说一句,我只有 ANDROID_HOME 的路径,但没有工具。 为了构建,您必须设置所有路径,如描述的 lvts,您是否运行了打包程序?设备必须能够连接到打包程序才能运行您刚刚构建的代码【参考方案4】:如果您从 Android Studio 运行您的应用程序,那么您必须使用您的 react 项目文件夹中的 react-native start
从命令行启动 react-native 打包程序。
您还必须使用 adb reverse tcp:8081 tcp:8081
设置 Android 端口转发。
你做到了吗?
【讨论】:
我会试试看的。我的 Mac 从昨天开始就处于待机状态,一切正常……我对 Mac 或打包程序不太熟悉。我想我有一些事情要弄清楚。 看看这是否适合你。 react 打包器偶尔会自行死机,因此必须重新启动。 吸取的教训并记录下来。启动打包程序并设置端口转发,它再次运行...谢谢 很高兴听到它有效。对于它的价值,如果您从命令行使用react-native run-android
(而不是从 Android Studio)启动您的应用程序,那么它应该启动打包程序并为您进行端口转发。但它还有其他问题有时会阻止它启动...
发布 apk 也会出现这种情况吗?以上是关于React-native Android:调用 AppRegistry.runApplication 时出错的主要内容,如果未能解决你的问题,请参考以下文章
在android中安排后台任务并从任务中调用react-native javascript方法
react-native 跳转到ios/android 权限设置界面
在react-native中,我如何在ios和android的图像上添加水印
react-native android/ios 手动/自动 修改版本号