React-native Android:调用AppRegistry.runApplication时出错

时间:2017-05-04 07:35:07

标签: javascript android react-native ecmascript-6

我真的不知道这里发生了什么。 我已经设置了一个基本应用,并使用了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',
    }
});

stacktrace:

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也无济于事。

4 个答案:

答案 0 :(得分:19)

如果您是从Android Studio运行应用程序,那么您必须使用您的react项目文件夹中的react-native start从命令行启动react-native packager。

您还必须使用adb reverse tcp:8081 tcp:8081设置Android端口转发。

你做过那些吗?

答案 1 :(得分:5)

当我为

设置正确的路径时,它帮助了我
ANDROID_HOME = C:\Users\username\AppData\Local\Android\sdk

和工具:

%ANDROID_HOME%\build-tools
%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\tools

答案 2 :(得分:2)

我最近在Genymotion模拟器中运行第二个React Native项目时遇到了同样的问题,我得到了一个错误的红色屏幕:

  

调用AppRegistry.runApplication

时出错

但是,在我的情况下,它不是由于缺少这些环境变量引起的,因为我在一开始就添加了它们。并且adb reverse tcp:8081 tcp:8081命令对我也不起作用。我尝试了几乎所有可以在互联网上找到的解决方案,但都没有。

就我而言,解决方案是设置Debug Server主机&amp;端口,如下所示:

CTRL + M,打开设置

的叠加层

enter image description here

点击“开发设置”,进入设置菜单

enter image description here

点击'Debug Server host&amp; “设备端口”,并在弹出窗口中输入localhost:8081

enter image description here

现在你可以重新加载它,它应该开始工作。

希望这个解决方案可以帮助一些人。

<强>背景

实际上,在Windows 7 Pro上设置我的开发环境后,当我运行我的第一个React Native应用程序时,我收到一条错误消息:

  

无法从资产'index.android.bundle'加载脚本。确保   您的捆绑包已正确打包,或者您正在运行包   服务器

要解决这个问题,我将Debug Server选项设置为localhost:8081,我希望该设置将在虚拟设备上全局生效。但它似乎适用于每个应用程序,这意味着我必须反复为新的React Native项目设置它。

我还在Windows 10 Home上设置环境(遵循与在Windows 7 Pro上完全相同的程序),不用设置调试服务器选项,它不会给我这样的错误,我可以运行任何React Native项目没有设置任何东西。

答案 3 :(得分:1)

我有类似的问题。尝试让它在设备上运行时,我会收到此错误。它在我的计算机上的模拟器上工作正常。

问题在于我会adb devicesreact-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是我的计算机用户名。

所以我转到System Environemnt Variables然后找到“Path”然后点击“Edit”,然后点击“New”并添加到“C:\ Users \ Mercurius \ AppData \ Local \ Android \ sdk \ platform-tools”中。这是截图: