web-dev-qa-db-fra.com

Android natif de React: erreur lors de l'appel de AppRegistry.runApplication

Je ne sais vraiment pas ce qui se passe ici. J'ai installé une application de base et utilisé une méthode de partage de code trouvée ici . Tout est très basique, alors voici le code:

// index.Android.js
// index.ios.js
import React, { AppRegistry } from 'react-native';
import CompetitionAgent from './app/index';

AppRegistry.registerComponent('CompetitionAgent', () => CompetitionAgent);

Et le composant:

//./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',
    }
});

Je sais que l'erreur peut être due à plusieurs choses. Cette disposition de base produit donc la même erreur.

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',
    }
});

Le 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) 

Il a très bien fonctionné hier, redémarrant Android Studio n'a pas aidé non plus.

10
DerpyNerd

Si vous exécutez votre application à partir de Android Studio, vous devrez démarrer le packager React-Native à partir de la ligne de commande en utilisant react-native start depuis le dossier de votre projet React.

Vous devrez également configurer la redirection de port Android à l'aide de adb reverse tcp:8081 tcp:8081.

Les avez-vous fait?

19
YSK

Cela m'a aidé lorsque j'ai mis en place un chemin correct pour

Android_HOME = C:\Users\username\AppData\Local\Android\sdk

et outils:

%Android_HOME%\build-tools
%Android_HOME%\platform-tools
%Android_HOME%\tools
5
ivts

J'ai récemment rencontré le même problème lors de l'exécution d'un second React projet natif dans l'émulateur Genymotion, j'ai eu l'écran rouge avec une erreur disant:

Erreur lors de l'appel de AppRegistry.runApplication

Cependant, dans mon cas, cela n'est pas dû à l'absence de ces variables d'environnement, comme je les ai ajoutées au tout début. Et la commande adb reverse tcp:8081 tcp:8081 Ne fonctionne pas non plus pour moi. J'ai essayé presque toutes les solutions que je pouvais trouver sur Internet, et aucune n'a fonctionné.

Dans mon cas, la solution est définie l'hôte et le port du serveur de débogage, comme indiqué ci-dessous:

Appuyez sur CTRL + M, Pour ouvrir la superposition de réglage

enter image description here

Cliquez sur "Paramètres de développement" pour accéder au menu des paramètres

enter image description here

Cliquez sur 'Debug Server Host & port for device' et tapez localhost:8081 Dans la fenêtre contextuelle

enter image description here

Et maintenant vous pouvez simplement le recharger, il devrait commencer à fonctionner.

J'espère que cette solution peut aider certaines personnes.

Contexte:

En fait, après avoir configuré mon environnement de développement sur Windows 7 Pro, lorsque j'ai exécuté ma première React application native, j'ai eu une erreur qui dit:

Impossible de charger le script à partir de l'index des actifs.Android.bundle. Assurez-vous que votre bundle est correctement emballé ou que vous exécutez un serveur de packages.

Pour résoudre ce problème, j'ai défini l'option Serveur de débogage sur localhost: 8081 et je m'attendais à ce que le paramètre prenne effet globalement sur le périphérique virtuel. Mais cela semble fonctionner par application, ce qui signifie que je dois le définir encore et encore pour les nouveaux projets React Native).

J'ai également configuré l'environnement sur Windows 10 Home (en suivant exactement la même procédure que je l'ai fait sur Windows 7 Pro), inutile de définir l'option de serveur de débogage, cela ne me donne pas de telles erreurs, et je peux simplement exécuter n'importe quel React Projet natif sans rien définir.

2
VincentZHANG

J'avais un problème similaire. J'obtiendrais cette erreur en essayant de le faire fonctionner sur l'appareil. Cela fonctionnait bien sur mes simulateurs sur mon ordinateur.

Le problème était quand je ferais adb devices ou react-native run-Android J'obtiendrais "ADB n'est pas reconnu comme une commande interne ou externe".

Mon correctif a donc été d'ajouter le chemin d'accès au répertoire parent d'adb.exe à mes variables d'environnement, puis de redémarrer mes invites de commande. Après avoir fait ça, adb devices ne lancerait pas le "blah externe interne non reconnu" et il a répertorié mon appareil. J'ai ensuite couru react-native run-Android et au démarrage plus d'écran rouge affichant le message d'erreur complètement inutile Error calling AppRegistry.runApplication! :)

J'ai donc trouvé que ADB se trouvait dans mon dossier:

C:\Users\Noitidart\AppData\Local\Android\sdk\platform-tools\adb.exe

Je suis sur un système Windows 10. Noitidart est mon nom d'utilisateur de l'ordinateur.

Je suis donc allé dans System Environemnt Variables, puis j'ai trouvé "Path" puis j'ai cliqué sur "Edit", puis j'ai cliqué sur "New" et j'ai ajouté dans "C:\Users\Mercurius\AppData\Local\Android\sdk\platform-tools". Voici une capture d'écran:

1
Noitidart